/** 題目分析:這一題要求我們判斷一個數是否爲迴文數,並且不可以使用額外存儲空間。
如果沒有後面的條件,那判斷是否是迴文數還是比較容易的。當時做到這一題時,對於迴文數判斷,我第一反應就是申請一個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;
}
};