文章目录
leetcode07:[07整数翻转]
题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
Example
输入: 123
输出: 321
solution idea
按行排序
一次构建反转整数的一位数字。使用long不会 stack overflow。在判断翻转后是否是32位整数
class Solution {
public:
bool overflow_zero_test(int x)
{
if (x > 2^31 || x < -2^31-1 || x==0)
return true;
else
return false;
}
int reverse(int x) {
long x_reverse=0;
while(x)
{
x_reverse=x_reverse*10+x%10;
x/=10;
}
if(x_reverse > 2147483647 || x_reverse < -2147483648) return 0;
return x_reverse;
}
};
python 实现
首先,对于一个整数,我们需要判定它的符号。如果它是负数的话,就先忽略掉符号,最后加上就好,这样方便计算。紧接着,要判断该数是否能在32位的储存空间里放下。其次,要判断整数里的0. 在做反转时,我们需要去除掉x从右到左所有的零,直到一个非零的位数。这样能保证再反转过来时第一位是非零数,这样返回的整数才有意义。然后通过对称数位调换位置,逐渐向中间趋近的方式来调换数字的位置。最后再加上相应的符号以及跟内存容量比较即可得出正确的答案。
class Solution:
def overflow_zero_test(self,x):
if x > 2**31 or x < -2**31-1 or x==0: # 如果超过储存空间则直接返回0.
return True
else:
return False
def reverse(self, x: int) -> int:
if self.overflow_zero_test(x): return 0
if x>=0:
tag=1
x_str=str(x).strip('0')
else:
tag=-1
x_str=str(x)[1:].strip('0')
x_reverse=tag*int(x_str[::-1])
if self.overflow_zero_test(x_reverse): return 0
return x_reverse
参考文献
- c++ prime 第5版
- c++ 标准库
- devdocs