1. 程式人生 >實用技巧 >其它 >LeetCode 每日一題 7. 整數反轉

LeetCode 每日一題 7. 整數反轉


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;
}

執行結果

LeetCode 每日一題 7. 整數反轉