题目
给你一个整数 xxx ,如果 xxx 是一个回文整数,返回 truetruetrue ;否则,返回 falsefalsefalse 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例子
- 输入:x=121x = 121x=121
输出:truetruetrue - 输入:x=−121x = -121x=−121
输出:falsefalsefalse
解释:从左向右读, 为 −121-121−121 。 从右向左读, 为 121−121-121− 。因此它不是一个回文数。 - 输入:x=10x = 10x=10
输出:falsefalsefalse
解释:从右向左读, 为 010101 。因此它不是一个回文数。
思路
1. 首尾测试
为了判断是否回文数,判断首尾是否相等,然后左指针和右指针左移和右移,可以不用计算到最后,只要在中途发现不对称就可以直接返回False,否则最后返回True。如果输入的是空字符串,也应该返回True,因为空字符串也是回文数。
- 时间复杂度:O(n)O(n)O(n)
- 空间复杂度:O(1)O(1)O(1)
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
# 空字符串也是回文数
if not s:
return True
i = 0
j = len(s) - 1
# 这表示只要 i 不小于 j,即左指针越过右指针或者指向同一个元素,就说明是回文数。
while i < j:
if s[i] == s[j]:
i += 1
j -= 1
# 只要不对称就返回False
else:
return False
# 判断完毕 返回True
return True
2. 数学
如果是负数,直接不是回文数;如果是正数,则将数值倒过来计算,然后比较是否和原数值相等。
- 时间复杂度:O(log(x))O(log(x))O(log(x))
- 空间复杂度:O(1)O(1)O(1)
class Solution:
def isPalindrome(self, x: int) -> bool:
n = 0
if x < 0:
return False
y = x
while y > 0:
n = n * 10 + y % 10
y = y // 10
return n == x