【LeetCode系列】迴文數 Palindrome Number

題目要求:

判斷一個數是否爲迴文數。需要注意的點:

①題目中已說明負數都不是迴文數,且能整除10的都不是迴文數

②最好別把 int 類型轉化爲 string 類型,因爲需要更大的存儲空間

 

思路:

該系列的上一篇反轉整數中已經實現將整數反轉,只需要比較輸入數據和反轉後的數據是否相等即可。但可以優化爲將整數反轉一半後進行比較。

 

解決方案:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0 || (x != 0 && x % 10 == 0)){
            return false;
        }
        int reverse = 0;
        while(x > reverse){       //判斷是否已反轉一半
            reverse = reverse * 10 + x % 10;
            x /= 10;
        }
        return x == reverse || x == (reverse / 10);
    }
};

在此解釋一下爲什麼還需要比較 x == (reverse / 10),這是針對當輸入數據 x 的位數是奇數時的處理。例如:x = 12321,第一次結果:reverse = 1, x = 1232,;第二次結果:reverse = 12, x = 123;第三次結果:reverse = 123, x = 12。此時不滿足 x < reverse,也不滿足 x == reverse,滿足 x == (reverse / 10) 均爲12。當輸入值 x 的位數是偶數時,如 x = 1221,執行到reverse = 12, x = 12時即可判斷。

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