回文数(Parlindrome)

和光同尘

回文数是这样的数,即一个数从左往右数和从右往左数是同样的结果。比如aba,121.

leetcode有一道题就是判断一个数是否是回文数。

问题描述:给定一个整数(int 类型),如果是回文数,函数返回为true.

bool isPalindrome(int x){
}

1.自然的想到将数字转为字符,利用python中的字符翻转读取然后与原字符进行判断。str(x)==str(x)[:-1]

2.如果不能使用字符的话。可以考虑对数字进行翻转,对整个数字翻转可能会超界。因此可以考虑对数字的一半进行翻转。如何判断到了数字的一半呢?不妨设我们翻转的数为rev.

while(x>rev)
        {
            rev=rev*10+x%10;
            x/=10;
        }

如上,当rev>x的时候,rev有和原数一半的位数或者一半的位数多一位。因此当rev/10或者rev和x(原数x的前一半)相等时,该数x是回文数。同时,当x是负数的时候,该数显然不为回文数。最后代码如下:

bool isPalindrome(int x){
    int rev=0;
    if(x<0||(x%10==0&&x!=0))
    {
        return false;
    }         
        while(x>rev)
        {
            rev=rev*10+x%10;
            x/=10;
        }
    if(rev==x||x==rev/10)
        return true; 
    else
        return false;
}

Leave a Reply