2

回文数

·2 分钟

🟢 Easy · 🏷️ 数学、字符串 · LeetCode#9

📖 题目

判断一个整数是否是回文数——正着读和倒着读一样。

输入输出说明
x = 121true正读倒读都是 121
x = -121false负号导致不对称,永远不是回文

💡 思路

判断回文,本质是判断"正着读"和"反着读"是否相同。最直接的做法是转成字符串,用切片 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 实现。