題目要求:
判斷一個數是否爲迴文數。需要注意的點:
①題目中已說明負數都不是迴文數,且能整除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時即可判斷。