给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
这道题想到了三个方案:
1、最常想到的(C语言方案):
int reverse(int x){
int i ,j,k,m=1,n[20];
k=x;
for(i=0;k!=0;i++){
n[i]=k%10;
k=k/10;
}
for(j=i-1;j>=0;j--){
k=n[j]*m+k;
m*=10;
}
return k;
}
可惜此方案溢出,报错,欢迎高手指点……
2、改用python来解决溢出问题(python方案1):
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
m=1
i=0
n=[]
k=x
while(k!=0):
n.append(k%10)
k=k/10
i+=1
for j in range(i-1,-1,-1):
k=n[j]*m+k;
m*=10;
return k
泪崩,时间超限!
3、最后想到用空间换时间(python方案1):
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x>=0:
k = list(str(x))
n = '0'
k.reverse()
for i in k:
n=n+i
n = int(n)
else:
x=abs(x)
k = list(str(x))
n = '0'
k.reverse()
for i in k:
n=n+i
n = -1*int(n)
if 2**31-1 >= n >=-2**31 :
return n
else:
return 0
终于成功了,时间上解决的很好,可是空间上挺浪费的。



