问题概述
给定一个整数 x,如果 x 是回文数,返回 true;否则,返回 false。
回文数是指正读和反读都相同的整数。
解法 1:字符串转换(最简单)
工作原理
将整数转换为字符串,检查是否等于其反转:
python
class Solution:
def isPalindrome(self, x):
if x < 0:
return False
s = str(x)
return s == s[::-1]
为什么 x < 0 返回 False?
- 负数不能是回文数,因为它们在开头有一个负号(
-) - 当反转时,像
-121这样的负数会变成121-,这不是有效的整数表示 - 因此,所有负数都会被立即拒绝
复杂度分析
- 时间复杂度: O(n) - 其中 n 是数字的位数
- 空间复杂度: O(n) - 用于字符串转换
何时使用
- 最简单易懂,易于实现
- 在实际情况下最快
- 易于阅读和维护
解法 2:反转数字(数学方法)
工作原理
数学方法反转数字并与原数字比较:
python
class Solution:
def isPalindrome(self, x):
if x < 0:
return False
original = x
reversed_num = 0
while x > 0:
reversed_num = reversed_num * 10 + x % 10
x //= 10
return original == reversed_num
复杂度分析
- 时间复杂度: O(n) - 其中 n 是数字的位数
- 空间复杂度: O(1) - 只使用常数额外空间
何时使用
- 当你想避免字符串转换时
- 需要常数空间
- 实际情况下比字符串转换稍慢
对比
| 方法 | 时间 | 空间 | 最佳适用 |
|---|---|---|---|
| 字符串转换 | O(n) | O(n) | 大多数情况,最简单代码 |
| 反转数字 | O(n) | O(1) | 常数空间要求 |
总结
字符串转换方法是最简单的,在大多数情况下实际最快。反转数字方法使用常数空间但稍慢。根据你的优先级选择:简单性和速度(字符串)vs 空间效率(反转)。