给定一个 32 位有符号整数,将整数中的数字进行反转:
python:
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
xStr = str(x)
xLen = len(xStr)
if xLen == 0:
return 0
elif xLen == 1:
return x
else:
start = xLen - 1
y = ""
while xStr[start] == "0" and start>=0:
start -= 1
if start<0:
return 0
else:
while start>0:
y += xStr[start]
start -=1
if xStr[0] == "-":
y = "-" + y
else:
y += xStr[0]
y = int(y)
if y>(2**31-1) or y<(-2**31):
return 0
else:
return y
C++:
class Solution {
public:
int reverse(int x) {
double y = 0;
if(x>=0){
while(x){
int val = x % 10;
y = y * 10 + val;
if(y>(pow(2,31)-1)){
y = 0;
break;
}
else{
x /= 10;
}
}
}
else if(x<0){
x = -x;
while(x>0){
int val = x % 10;
y = y * 10 + val;
if(y>(pow(2,31))){
y = 0;
break;
}
else{
x /= 10;
}
}
y = -y;
}
return static_cast<int>(y);
}
};
C++代码一开始总是在输入为-2147483648时输出-2147483648,而不是输出溢出值。我将负数的情况下里的while判断从x改为x>0解决了问题。
下面是参考别人的代码,很简洁也很高效:
class Solution {
public:
int reverse(int x) {
double y=0;
for(;x;x/=10){
y = y*10 + x%10;
}
if(y>INT_MAX || y<INT_MIN) return 0;
return y;
}
};