判断一个整数是否是回文,不用额外空间

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        
        if x < 0 or (x % 10 == 0 and x != 0):
            return False
        revx = 0
        while(x > revx):
            revx = revx * 10 + x % 10
            x = int(x/10)
        return x == revx or x == int(revx/10)
        
        

如上,思路就是,负数不是回文,然后计算数字后半部分的反转数,当数字大于反转数时,停止,最后计算前半部分与翻转后的是否相待,最后的or后面,是因为

如果x的位数是奇数,那么需要把反转后的数也除以10,再比较,比如121,计算到最后,x=1, revx=12,显示那个2是中间的数字,另外,

if x < 0 or (x % 10 == 0 and x != 0):这里or后面,是因为如果x是10,100,1000,这样的数,计算到最后x=0, revx=1,这样结果反而是true,而这样的数字,
由于最后一位是0,首位非0,肯定不是回文,

posted @ 2018-01-14 21:42  xqnq2007  阅读(166)  评论(0编辑  收藏  举报