判斷一個 32 位有符號整數是否為回文數。負數不是回文;不能使用額外空間(即不能轉字符串);反轉整數可能溢出需處理。
將整數後一半數字反轉,與前一半比較。具體:
x < 0 或 x % 10 == 0 && x != 0 直接返回 false。reverted = 0;while (x > reverted) { reverted = reverted * 10 + x % 10; x /= 10; }x == revertedx == reverted / 10(中間位不影響)此法只反轉一半數字,完全避免溢出,空間 O(1),時間 O(log10n)。
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int reverted = 0;
while (x > reverted) {
reverted = reverted * 10 + x % 10;
x /= 10;
}
return x == reverted || x == reverted / 10;
}
};
x % 10 == 0 && x != 0 排除 10, 100 等以 0 結尾的數(反轉會有前導 0)。x > reverted 確保只處理一半位數。Palindrome Number 考察整數操作技巧,「半數反轉」是標準解法,既滿足空間限制又避免溢出。面試中常作為基礎熱身題,掌握邊界條件處理至關重要。