解法一:对输入数字进行整除和取余运算,并把输出值乘以10后与每次取余的结果相加,直到原数据变为0
每次循环,原数对10取余+结果乘以10,同时原数对10整除。
- 时间复杂度:O(log(x)),x 中大约有 log10(x) 位数字。
- 空间复杂度:O(1)。
C++:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
Python:
def reverse(self, x):
R = 0 #返回值
flag = 1 #标记输入值的正负
if x<0:
x = abs(x)
flag = -1 #输入是负数
while x != 0:
R = R*10+x%10
x = x//10
if -2147483647<R< 2147483648:#判断是否越界
return R*flag
else:
return 0
解法二:反向复制。a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍
Python:
def reverse(self, x):
flag = 1
if x < 0:
flag = -1
x = -x
R = str(x)[::-1]
R = int(R)
if R> 2147483647 or R < -2147483648:
R = 0
return R*flag