题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
进阶:**
你能不将整数转为字符串来解决这个问题吗?
示例1
输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例2
输入: 121输出: true
实现
思路1 字符串
最容易想到的思路就是数字转字符串,再将字符串翻转。不过这个方法也可以优化一下,及将字符串的上半部分跟字符串的下半部分进行对比,这是一开始没想到的做法,这里放一下该方法的代码:
def isPalindrome(self, x)s = str(x)l = len(s)h = l // 2return s[:h] == s[-1: -h-1: -1]
思路2 数字翻转
数字翻转也容易想到,但是假设x=2112342378,翻转后的x会发生溢出。因此这里也是借鉴上面的思路,只将数字的后半部分代码进行翻转,最后跟前半部分进行对比。
这里要注意循环结束的条件,因为
- 当x为偶数时,例如1221,将右半部分翻转后为12,x剩下12,此时循环可以终止了,终止条件为
- 而当x为奇数时,例如12321,右半部分翻转后为12,x剩下123。所以这里我们再循环一次,使右半部分为123,x剩下12,在最后对比的时候让
。则此时循环终止条件为
- 所以综合上述,循环终止条件为
class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""if x<0 or (x % 10 == 0 and x != 0):return Falseright_rev = 0while x > right_rev:right_rev = right_rev*10 + x % 10x = x // 10return x == right_rev or x ==right_rev // 10
