题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反装。
示例 1输入:123
输出:321
示例 2
输出:-123
输出:-321
注意
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[-(2^31), 2^31 - 1]
。请根据这个假设,如果反转后整数溢出那么就返回 0。
思考
还是最简单的用数学方法加循环,取模和除法。
解题思路
首先,循环倒序求出每一位数字。然后叠加到最后结果上,最后需要判断不要超出 32 位的有符号整数的表示范围。
Python 实现
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
tempX = x
bNegative = False
intMax = (pow(2, 31) - 1)
intMin = -(pow(2, 31))
if(tempX < 0):
tempX = abs(tempX)
bNegative = True
res = 0
while(tempX != 0):
num = tempX % 10
tempX = int(tempX / 10)
res = res * 10 + num
if(res >= intMax):
return 0
elif(res <= intMin):
return 0
if(bNegative):
res *= -1
return res
在 LeetCode 上跑了 68ms
C++ 实现
#include <math.h>
class Solution
{
public:
int reverse(int x)
{
int num = 0;
int tempX = x;
int res = 0;
int intMax = pow(2, 31) - 1;
int intMin = -(pow(2, 31));
while(tempX != 0)
{
num = tempX % 10;
tempX = int(tempX / 10);
// intMax = 2147483647
if((res > intMax / 10) || ((res == intMax / 10) && (num > 7)))
{return 0;}
// intMin = -2147483648
if((res < intMin / 10) || ((res == intMin / 10) && (num < -8)))
{return 0;}
res = res * 10 + num;
}
return res;
}
};
在 LeetCode 上跑了 20ms