LeetCode_Easy心得:9. Palindrome Number (C語言)

/** 題目分析:這一題要求我們判斷一個數是否爲迴文數,並且不可以使用額外存儲空間。

     如果沒有後面的條件,那判斷是否是迴文數還是比較容易的。當時做到這一題時,對於迴文數判斷,我第一反應就是申請一個int型變量temp,用temp來存儲輸入x的反轉,接着將temp與x進行比較,最後通過比較結果來輸出true或false。但是題中明確給出了不可以使用額外存儲空間的條件,因此剛纔提到的方法只能放棄。

     通過網絡上一些高手的點撥,我想到了一個滿足條件的辦法:①創建兩個int變量left和right;②left表示當前數x的最高位數字,right表示當前數x的最低位數字;③若 left == right,則將當前數x去掉最高位和最低位,並且繼續執行②,直至 x == 0;

  *

class Solution {
public:
    bool isPalindrome(int x) {
        
        int left,right,len=1;
        if(x>INT_MAX ||x<0) return false; //判斷輸入x是否爲負數或是否超出int範圍,如果是,直接返回false; 
        
        while(x/len>=10){
            len*=10;                       //變量len表示輸入x位數,例如x是32123,則循環後的len == 10000;
        }
        
        while (x){
            left=x/len;                    //left對應x的最高位;
            right=x%10;                    //right對應x的最低位;
            
            if(left!=right)                //使用if語句來判斷x是否滿足迴文數條件;
                return false;
            x=(x%len)/10;                  //濾除x最高和最低位;例如x=32123,經過這一步運算後,x=212;
            len/=100;                      //因爲x已經濾除最高和最低位,所以表示位數len也要相應減少;
            
        }
        return true;                        //while循環結束之後,證明輸入的x滿足迴文數條件,因此返回true;
        
    }
};

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