题目描述
思路解析动画文字版
转字符串容易绕过溢出判断。
每轮取出 x 的末位 digit,把 ans 变成 ans*10+digit;更新前先检查是否越界。
1. 反复弹出最低位,接到 ans:整数反转:反复弹出 x 的最低位,接到 ans 的末尾。从最右的 3 开始。
2. 弹 3 → ans=3:弹出 3:ans = 0×10 + 3 = 3,x 砍掉末位变 12。
3. 弹 2 → ans=32:弹出 2:ans = 3×10 + 2 = 32,x → 1。
4. 弹 1 → ans=321:弹出 1:ans = 32×10 + 1 = 321,x 变 0,停。
5. 关键帧 · 溢出检查:关键帧:本题真正的坑是溢出。反转后若超出 32 位范围 [−2³¹, 2³¹−1](如 1534236469→反转溢出)就返回 0。C++/Java 用 long 暂存再判。末尾 0(如 −120→−21) 弹出后不会留前导 0。
一句话记住:每轮取出 x 的末位 digit,把 ans 变成 ans*10+digit;更新前先检查是否越界。
边界三连:三种情况先想清楚。
面试追问 1:核心思路。
面试追问 2:防溢出是关键。
面试追问 3:负号和末尾0自然处理。
这题学完不要乱跳,下一步去对应专题 /leetcode-animation/ds?k=bit 连刷同类题;卡住时用 AI 答疑问“我的状态定义哪里不稳”。
参考代码
class Solution: def reverse(self, x): sign = -1 if x < 0 else 1 x = abs(x) ans = 0 while x: x, d = divmod(x, 10) ans = ans * 10 + d ans *= sign return ans if -2**31 <= ans <= 2**31 - 1 else 0复杂度
- 时间复杂度:O(log|x|),循环次数 = x 的位数 (≤ 10)
- 空间复杂度:O(1),只用 ans 一个累加变量
可套用的代码模板
骨架:%10 取末位、×10 接上去、最后判 32 位范围。
Python
# 整数反转骨架ans = 0while x != 0: d = x % 10 # 取末位(负数得负余数) x //= 10 ans = ans * 10 + d # 接到末尾# 检查 32 位范围,超界返回 0return ans if -2**31 <= ans <= 2**31-1 else 0易错点
面试追问把动画讲成自己的话
追问核心思路是什么?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
汉明距离
LeetCode 461 · 简单 · 沿着 位运算 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题