📚 题目概要

将 32 位有符号整数反转,若反转结果超出范围 [-2^31, 2^31-1]
则返回 0。例如,输入 123
返回 321
,输入 -123
返回 -321
。
🧰 前置知识
- 整数运算 :取余(
%
)和整除(//
)操作。 - 溢出检查:理解 32 位整数范围(-2147483648 至 2147483647)。
🚧 问题难点
- 符号处理:需正确处理正负数的反转逻辑。
- 溢出检测:反转过程中需动态检查是否超出 32 位整数范围。
- 末尾零处理 :如输入
120
需返回21
,而非021
。
🔑 关键思路
- 符号分离:先记录符号,将整数转为绝对值处理。
- 逐位反转:通过取余和整除操作逐位提取数字,构建反转后的绝对值。
- 溢出预判:在每一步计算中,提前判断反转后的数是否会溢出。
💻 代码实现
python
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
sign = 1 if x > 0 else -1 # 记录符号位
x_abs = abs(x) # 取x的绝对值进行运算
res_abs = 0 # 记录反转后的结果
while x_abs > 0:
digit = x_abs % 10 # 记录个位数
x_abs = x_abs // 10 # 记录去掉最后一位的数
res_abs = res_abs * 10 + digit
# 根据原符号定结果的符号
res = res_abs if sign == 1 else -res_abs
# 结果越界判断
if res >= -2**31 and res <= 2**31 -1:
return res
else:
return 0
📊 复杂度分析
- 时间复杂度 :O(log(x)),数字位数决定循环次数(如
123
需 3 次循环)。 - 空间复杂度:O(1),仅用常数级变量存储中间结果。
❗ 易错点与测试案例
易错点
- 忽略符号:未正确处理负数,导致反转后符号错误。
- 溢出检查遗漏:未预判溢出,导致最终结果错误。
测试案例
-
案例1 :
输入:
x = 123
输出:
321
解释:直接反转,结果在范围内。
-
案例2 :
输入:
x = -123
输出:
-321
解释:符号保留,绝对值反转。
-
案例3 :
输入:
x = 2147483647
输出:
0
解释:反转值为
7463847412
,超过正数阈值。
🔗 总结与扩展
模式归纳
- 逐位处理:适用于数字反转、回文数判断等问题。
- 溢出预判:在计算过程中动态检查溢出,而非最后统一处理。
同类问题
- 回文数判断:反转数字后与原数比较。
- 字符串转整数:处理符号、非数字字符及溢出。