Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

思路

这是一次失败的尝试。考虑的情况太多,以至于没有好好地去整合。

必须注意的是,我们需要考虑如果翻转 100 这个数,最后的结果是怎么样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if (x != 0):
# 首先不应该加一个判断是否为0的分支,没有意义啊。0也是无所谓符号的嘛
isNegative = False
if (x < 0):
x = -x
isNegative = True
# 获得每一位的数字具体是多少,放到res里面
res = []
while (x > 0):
res.append(x % 10)
x = x / 10
while (res[0] == 0):
del res[0]
# 反向遍历res,结果赋值给ans
length = len(res)
if (length):
ans = 0
#可以写成 for i, enum in enumerate(res[::-1])
for i in range(length):
ans += res[-(i+1)] * ( 10 ** i )
if (isNegative):
ans = -ans
#可以利用python自带的MAXINT/MININT参数
if (ans < -2 ** 31 or ans > 2 ** 31 - 1):
return 0
else:
return ans
else:
return 0

最后,可以参考一下示例代码,不需要这么多判断分支,也能完成这道题。
https://discuss.leetcode.com/topic/6005/shortest-code-possible-in-c

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
int reverse(int x) {
long long res = 0;
while(x) {
res = res*10 + x%10;
x /= 10;
}
return (res<INT_MIN || res>INT_MAX) ? 0 : res;
}
};