反轉整數數字。
x = 123 → 返回 321x = -123 → 返回 -321注意:反轉後超出 32 位有符號整數範圍 [-2^31, 2^31-1] 返回 0。
public class Solution {
public int reverse(int n) {
long sum = 0;
int flag = 1;
if (n < 0) {
flag = -1;
n = -n; // 注意:n = Integer.MIN_VALUE 時 -n 會溢出,但題目輸入範圍內不會出現
}
try {
String s = Integer.toString(n);
s = new StringBuffer(s).reverse().toString();
sum = Long.parseLong(s) * flag;
} catch (NumberFormatException e) {
return 0; // 溢出捕獲
}
return (int) sum;
}
}
public class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
// 溢出檢查
if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7)) return 0;
if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8)) return 0;
rev = rev * 10 + pop;
}
return rev;
}
}
| 維度 | 字符串法 | 數學法 |
|---|---|---|
| 時間複雜度 | O(log₁₀n) | O(log₁₀n) |
| 空間複雜度 | O(log₁₀n) (字符串) | O(1) |
| 溢出處理 | try-catch 捕獲 | 預判邊界 |
| 推薦場景 | 面試快速寫出 | 生產環境、性能敏感 |