LC 7. 整数反转
1. 问题描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1 输入: 123 输出: 321
示例 2 输入: -123 输出: -321
示例 3 输入: 120 输出: 21
注意: 假设当前环境只能存储得下 32 位的有符号整数,则其数值范围为
[−2^31, 2^31 − 1]
。
请根据这个假设,如果反转后整数溢出那么就返回 0。
Related Topics 数学
2. 题解
方法一、数学
记 rev 为翻转后的数字,为完成翻转,可以重复「弹出」x 的末尾数字,将其「推入」rev 的末尾,直至 x 为 0。
要在没有辅助栈或数组的帮助下「弹出」和「推入」数字,可以使用如下数学方法:
// 弹出 x 的末尾数字 digit digit = x % 10 x /= 10 // 将数字 digit 推入 rev 末尾 rev = rev * 10 + digit
题目需要判断反转后的数字是否超过 32 位有符号整数的范围 [-2^{31},2^{31}-1]
,例如 x=2123456789
反转后的 rev=9876543212>2^31−1=2147483647
,超过了 32 位有符号整数的范围。
因此需要在「推入」数字之前,判断是否满足 −2^31≤rev⋅10+digit≤2^31−1
。若该不等式不成立则返回 0。
但是题目要求不允许使用 64 位整数,即运算过程中的数字必须在 32 位有符号整数的范围内,因此不能直接按照上述式子计算,需要另寻他路。

class Solution { public int reverse(int x) { int rev = 0, digit = 0; while(x!=0){ if(rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){ return 0; } digit = x % 10; x /= 10; rev = rev * 10 + digit; } return rev; } }
复杂度分析
-
时间复杂度:
O(log∣x∣)
。翻转的次数即 x 十进制的位数。 -
空间复杂度:
O(1)
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构