题目描述
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
我的解法——两遍循环(AC)
- 第一遍循环数组记录总位数,第二遍生成新数
- 注意一些地方要int取整
- 时间空间复杂度均为O(n)。
- Beat14%
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
flag = False
if(x < 0):
flag = True
x = -x
elif(x == 0):
return 0
xt = x
all = 0
while(x > 0):
x = int(x / 10)
all += 1
res = 0
x = xt
for i in range(all - 1,-1,-1):
res += (xt % 10) * pow(10,i)
xt = int(xt / 10)
if(flag):
res = -int(res)
else:
res = int(res)
if(res > pow(2,31) - 1 or res < -pow(2,31)):
return 0
else:
return res
最优解法——一遍循环
int reverse(int x) {
int y=0;
int n;
while( x != 0){
n = x%10;
if (y > INT_MAX/10 || y < INT_MIN/10){
return 0;
}
y = y*10 + n; //这里就避免了循环两遍,还要确定位数,6666666
x /= 10;
}
return y;
}