题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
★ 进阶:
你能不将整数转为字符串来解决这个问题吗?
解法:
-
数学法
1 # 全反转 2 class Solution: 3 def isPalindrome(self, x): 4 if x<0 or (x != 0 and x%10 == 0): 5 return False 6 7 y, rev = x, 0 8 while y>0: 9 rev = rev*10 + y%10 10 y //= 10 11 return rev == x 12 13 14 # 半反转(改进方法) 15 class Solution: 16 def isPalindrome(self, x): 17 if x<0 or (x != 0 and x%10 == 0): 18 return False 19 20 y, rev = x, 0 21 while y>rev: # 只需要改临界点, 22 rev = rev*10 + y%10 23 y //= 10 24 return y == rev or (y == rev//10)
-
字符串法
1 # 全反转 2 class Solution: 3 def isPalindrome(self, x): 4 return str(x) == str(x)[::-1] 5 6 7 # 半反转(改进方法) 8 class Solution: 9 def isPalindrome(self, x): 10 x = str(x) 11 return x[:len(x)//2] == x[:-(len(x)//2)-1:-1]
-
延伸知识点
★★★ 如有问题,欢迎指正:raykindle@163.com ★★★