給定一個 32 位有符號整數,將其數字順序反轉。若反轉後超出 [-2^31, 2^31-1] 範圍,返回 0。範例:123 → 321,-123 → -321,120 → 21。
120 % 10 = 0,商 12,下輪處理 12)。long long (或 int64_t) 暫存結果,最後判斷是否超出 INT_MAX / INT_MIN。public class Solution {
public int reverse(int x) {
if (x == 0) return 0;
long res = 0;
int val = Math.abs(x);
while (val > 0) {
res = res * 10 + val % 10;
val /= 10;
}
if (res > Integer.MAX_VALUE) return 0;
return x > 0 ? (int)res : (int)-res;
}
}
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
// 檢測正向溢出:rev > INT_MAX/10 或 (rev == INT_MAX/10 且 pop > 7)
if (rev > INT_MAX/10 || (rev == INT_MAX/10 && pop > 7)) return 0;
// 檢測負向溢出:rev < INT_MIN/10 或 (rev == INT_MIN/10 且 pop < -8)
if (rev < INT_MIN/10 || (rev == INT_MIN/10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
};
本題是基礎數字操作與邊界條件處理的經典練習。面試時建議先寫 long long 版本確保邏輯正確,再補充「不使用 64 位整數」的溢出檢測技巧,展示對整數表示範圍的深入理解。