判斷整數是否為回文數。負數非回文;不允許使用額外空間(即不可轉字符串)。
逐位提取數字構建反轉數,比較與原數是否相等:
public boolean isPalindrome(int x) {
if (x < 0) return false;
if (x == 0) return true;
int original = x;
int reversed = 0;
while (x != 0) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
return original == reversed;
}
reversed 可能溢出 int 範圍(如 1999999999 反轉超過 INT_MAX)。改進:
long 存儲 reversedwhile (x > reversed) reversed = reversed*10 + x%10, x/=10; 最後比較 x==reversed || x==reversed/10public boolean 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;
}
O(log n),空間 O(1)reverted/10 中被忽略