给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

1
2
输入:x = 123
输出:321

示例 2:

1
2
输入:x = -123
输出:-321

示例 3:

1
2
输入:x = 120
输出:21

示例 4:

1
2
输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

有人跟我说,你直接用[::-1]不就好了?但是我们想想,如果x = -123,[::-1]的结果是什么?是不是321-?,那么如果是1230,是不是变成了0123?

所以…

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
class Solution:
def reverse(self, x: int) -> int:
# 处理符号,记录是否为负数
sign = -1 if x < 0 else 1

# 转为正数处理
x = abs(x)

# 反转数字
result = 0
while x != 0:
# 取出最后一位数字
digit = x % 10
# 去掉最后一位数字
x //= 10
# 构建反转后的数字
result = result * 10 + digit

# 应用符号
result *= sign

# 检查是否超出32位整数范围
INT_MAX = 2**31 - 1
INT_MIN = -2**31

if result > INT_MAX or result < INT_MIN:
return 0

return result