第 2 章
回文数
·约 2 分钟
🟢 Easy · 🏷️ 数学、字符串 · LeetCode#9
📖 题目
判断一个整数是否是回文数——正着读和倒着读一样。
| 输入 | 输出 | 说明 |
|---|---|---|
x = 121 | true | 正读倒读都是 121 |
x = -121 | false | 负号导致不对称,永远不是回文 |
💡 思路
判断回文,本质是判断"正着读"和"反着读"是否相同。最直接的做法是转成字符串,用切片 s[::-1] 一行反转([start:end:step],步长 -1 表示从后往前取)。
如果不让用字符串(有些面试官会这么要求,想考察数字操作),可以逐位构建反转后的数字:% 10 取出末位,// 10 去掉末位,一轮一轮往前推。
💻 代码
方法一:字符串反转(推荐)
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
return s == s[::-1]
时间复杂度 O(n),空间复杂度 O(n)。
方法二:数字逐位反转
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
original = x
reverse = 0
while x > 0:
reverse = reverse * 10 + x % 10 # 取末位,拼到 reverse 后面
x = x // 10 # 去掉末位
return reverse == original
x 在循环里会被改掉,所以要先存一份 original 留着最后比较。时间复杂度 O(n),空间复杂度 O(1)——不过实测字符串反转仍然更快,因为 Python 的切片是 C 实现。