【题目描述】
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number/
【解题思路】
首先,排除不可能的情况:
- 负数不可能是回文数
- 10的倍数不可能是回文数(0除外)
对于剩下的数字,121,考虑整数反转:
ori=x
while x :
reverse = reverse*10 + x%10
x = x/10
最终判断ori和reverse是否相等即可。
【优化思路】:判断一半即可,当reverse>=x的时候,证明至少已经超过一半。此时有两种情况:
- 1221 reverse=12,x=12,判断x是否等于reverse
- 12121 reverse=121,x=12,判断reverse/10是否等于x
用Python实现的的代码如下:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x<0 or (x%10==0 and x!=0):
return False
reverse = 0
while x > reverse:
reverse = reverse*10 + x%10
x = x/10
if x==reverse or reverse/10==x:
return True
return False