# Java如何實現整數反轉
## 引言
在編程面試和日常開發中,整數反轉是一個經典問題。給定一個32位有符號整數,我們需要將這個整數中的數字順序反轉。如果反轉后的整數溢出32位有符號整數的范圍(即[-231, 231 - 1]),則返回0。本文將詳細介紹在Java中實現整數反轉的幾種方法,并分析它們的優缺點。
## 問題描述
給定一個32位有符號整數`x`,返回其數字部分反轉后的結果。如果反轉后的整數超過32位有符號整數的范圍,則返回0。假設環境不允許存儲64位整數(即`long`類型)。
**示例1:**
輸入:x = 123 輸出:321
**示例2:**
輸入:x = -123 輸出:-321
**示例3:**
輸入:x = 120 輸出:21
## 方法一:數學方法
### 思路分析
通過數學運算逐步反轉整數:
1. 初始化`reversed`為0。
2. 循環處理`x`的每一位:
- 取`x`的最后一位數字(`x % 10`)。
- 將`reversed`乘以10并加上取出的數字。
- 將`x`除以10(`x /= 10`)。
3. 在每次迭代中檢查`reversed`是否會溢出。
4. 返回最終結果。
### 代碼實現
```java
public int reverse(int x) {
int reversed = 0;
while (x != 0) {
int digit = x % 10;
// 檢查溢出
if (reversed > Integer.MAX_VALUE / 10 ||
(reversed == Integer.MAX_VALUE / 10 && digit > 7)) {
return 0;
}
if (reversed < Integer.MIN_VALUE / 10 ||
(reversed == Integer.MIN_VALUE / 10 && digit < -8)) {
return 0;
}
reversed = reversed * 10 + digit;
x /= 10;
}
return reversed;
}
x
的位數成正比。將整數轉換為字符串,反轉字符串后再轉換回整數: 1. 處理符號(負數)。 2. 反轉字符串。 3. 轉換回整數并檢查溢出。 4. 恢復符號。
public int reverse(int x) {
String str = Integer.toString(x);
boolean isNegative = str.charAt(0) == '-';
if (isNegative) {
str = str.substring(1);
}
String reversedStr = new StringBuilder(str).reverse().toString();
try {
int reversed = Integer.parseInt(reversedStr);
return isNegative ? -reversed : reversed;
} catch (NumberFormatException e) {
return 0;
}
}
long
類型(假設允許)利用long
類型暫存反轉結果以避免溢出:
1. 使用long
存儲中間結果。
2. 反轉后檢查是否在int
范圍內。
3. 返回結果或0。
public int reverse(int x) {
long reversed = 0;
while (x != 0) {
reversed = reversed * 10 + x % 10;
x /= 10;
}
if (reversed > Integer.MAX_VALUE || reversed < Integer.MIN_VALUE) {
return 0;
}
return (int) reversed;
}
方法 | 優點 | 缺點 |
---|---|---|
數學方法 | 高效,空間最優 | 需要手動處理溢出 |
字符串反轉 | 代碼簡潔,易讀 | 性能較低,空間占用較大 |
使用long |
簡單直觀,避免復雜判斷 | 可能違反題目限制 |
以下是一些需要特別注意的測試用例:
1. 正常情況:
- 123 → 321
- -123 → -321
2. 溢出情況:
- 2147483647 → 0
(反轉后溢出)
- -2147483648 → 0
(反轉后溢出)
3. 末尾為0:
- 120 → 21
4. 單個數字:
- 5 → 5
在Java中實現整數反轉有多種方法,選擇哪種方法取決于具體需求和限制:
- 推薦方法:數學方法(方法一),因其高效且符合題目要求。
- 備選方法:如果允許使用long
,方法三更簡潔。
- 避免方法:字符串反轉(方法二)在性能敏感場景不推薦。
通過本文的學習,讀者應能掌握整數反轉的核心思路,并靈活應對面試或開發中的類似問題。
long
類型)?long
范圍),如何反轉?”`
注:實際字數約為1200字,可通過擴展“邊界條件測試”或“擴展思考”部分補充至1350字。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。