[leetcode]Palindrome number 回文数

题目描述:

首先负数一定不是回文数,0是回文数,10的倍数一定不是回文数10000

方法1 ,跟前面的求数的逆序一样,求出逆序数,与原数比较即可,需要借助temp:

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0)
            return false;
        int res = 0;
        int temp = x;
        while(temp != 0){
            res = res * 10 + temp % 10;
            temp /= 10;
        }
        return res == x ? true:false;
    }
};

方法2,逆序一半进行比较:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0 || (x != 0 && x% 10 ==0))
            return false;
        int res = 0;
        while(x > res){
            res = res * 10 + x % 10;
            x /= 10;
        }/*ex.121,res=1,x=12,res=12,x=1,退出循环,x==res/10,或1221,x==res,也是回文数*/
        return (res /10 == x)||(res == x);
    }
};

这个方法事先做了一定的剔除,逆序一半进行比较,当x < res 时退出循环,如果这时的 x 与res 相等,或者两者只有一位的差距,即res /10 = x,那么就是回文数,注意 while 循环的判断条件 x > res ,不能有 x > = res, 否则会出现错误,因为考虑 0 时显然res = x , 会构成死循环。

这两个算法都不太好,用时180ms.

猜你喜欢

转载自blog.csdn.net/T2777/article/details/82933499
今日推荐