1. 程式人生 > >[leetcode]Palindrome number 迴文數

[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.