leetcode9_迴文數_判斷整數是否迴文數

1. 負數不是.

2. 溢出也不是.

3. 時間複雜度log(x).

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)
            return false;
        int sum=0;
        int oldx = x;
        while(x){
            int temp = x%10;
            if(sum>INT_MAX/10 || sum==INT_MAX/10&&temp>=7)
                return false;
            sum = sum*10 +temp;
            x = x/10;
        }
        if(oldx==sum)
            return true;
        else
            return false;
    }
};

4.  按照第二個想法,爲了避免數字反轉可能導致的溢出問題,爲什麼不考慮只反轉int 數字的一半?畢竟,如果該數字是迴文,其後半部分反轉後應該與原始數字的前半部分相同。

5. 現在的問題是,我們如何知道反轉數字的位數已經達到原始數字位數的一半?

我們將原始數字除以 10,然後給反轉後的數字乘上 10,所以,當原始數字小於反轉後的數字時,就意味着我們已經處理了一半位數的數字。

class Solution {
public:
    bool isPalindrome(int x) {
        // 特殊情況:
        // 如上所述,當 x < 0 時,x 不是迴文數。
        // 同樣地,如果數字的最後一位是 0,爲了使該數字爲迴文,
        // 則其第一位數字也應該是 0
        // 只有 0 滿足這一屬性
        if(x<0 || x%10==0 && x!=0)
            return false;
        int reverse = 0;
        while(x>reverse) {
            reverse = reverse*10 + x%10;
            x /= 10;
        }
        return (x==reverse) || (x==(reverse/10));
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章