力扣-9. 回文数(Palindrome Number)

力扣-9. 回文数(Palindrome Number)
solovedeng最后编辑于2025-06-04
9. 回文数(Palindrome Number)
Easy
给定一个整数 x,若 x 是回文整数则返回 true,否则返回 false。
示例 1:
输入: x = 121
输出: true
解释: 从左到右和从右到左都是 121。
示例 2:
输入: x = -121
输出: false
解释: 从左到右为 -121,从右到左为 121-,因此不是回文。
示例 3:
输入: x = 10
输出: false
解释: 反向为 01,因此不是回文。
约束:
-2^{31} <= x <= 2^{31} - 1
进阶: 你能在不将整数转换为字符串的情况下解决此题吗?
思路与常见解法
把整数转换为字符串后判断回文是最直接的方法,但进阶要求不允许字符串转换,可以用以下数学方法:
首尾位比较(取整/取余法):通过计算除数
div(使x/div得到最高位),比较最高位与最低位(x%10),然后去掉首尾继续比较。需要注意更新div(每次去除两位后div除以 100)。翻转后半段(反转半段法):将数字的后半段反转,直到反转后的数
revertNum>= 剩余的x为止;若为回文则两者相等(偶数位)或revertNum/10 == x(奇数位)。此方法无需处理溢出(若溢出则不是回文)。直接调用反转并比较(借助 Reverse Integer):若反转后的值与原值相等则为回文,但需注意反转可能溢出,若溢出则直接返回 false。
下面给出三种实现。
方法一:首尾位比较(取整/取余)
1 | class Solution { |
- 时间复杂度: O(log10(x))(位数相关)
- 空间复杂度: O(1)
方法二:翻转后半段(反转半段法)
1 | class Solution { |
- 时间复杂度: O(log10(x))
- 空间复杂度: O(1)
方法三:反转并比较(复用 Reverse Integer)
1 | class Solution { |
- 说明: 若反转过程中发生溢出,则返回 -1,表示不是回文。
作者想说的话:
不使用字符串时,可以通过取整/取余或反转后半段两种数学方式判断回文,二者时间复杂度均与数字位数成正比,且空间复杂度为常数。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果


