LeetCode 每日一題 7. 整數反轉
阿新 • 來源:網路 • 發佈:2021-05-05
7. 整數反轉
給你一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉後的結果。
如果反轉後整數超過 32 位的有符號整數的範圍 [−2^31, 2^31 − 1] ,就返回 0。
假設環境不允許儲存 64 位整數(有符號或無符號)。
示例 1:
輸入:x = 123
輸出:321
示例 2:
輸入:x = -123
輸出:-321
示例 3:
輸入:x = 120
輸出:21
示例 4:
輸入:x = 0
輸出:0
提示:
-2^31 <= x <= 2^31 - 1
方法一:
解題思路
不考慮越界的情況,翻轉一個整數,只需要依次彈出末尾數字壓入一個類似 “棧” 這樣的結構中並組裝成數字即可。
- 可以用
x % 10彈出末尾陣列,並另x /= 10; - 設返回值為
ret,每次彈出元素壓入棧頂可以用ret = ret * 10 + x % 10來操作。
關於越界,題目要求只能使用 32 位,因此不能使用 long 進行比較。可以在彈出最後一位數字(即 x 的第一位)時,判斷此時的 ret 是否大於 Interger.MAX_VALUE / 10 或者 小於 Integer.MIN_VALUE / 10。為什麼不用考慮等於的情況,如果發生越界,x 的第一位一定是1 或 2,要小於 Interger.MAX_VALUE 的 7 和 Integer.MIN_VALUE 的 8。
參考程式碼
public int reverse(int x) {
int ret = 0;
while(x != 0) {
if(ret > Integer.MAX_VALUE / 10 || ret < Integer.MIN_VALUE / 10) {
return 0;
}
ret = ret * 10 + x % 10;
x /= 10;
}
return ret;
}
執行結果

