1. 程式人生 > >7. 反轉整數(簡單題)

7. 反轉整數(簡單題)

給定一個 32 位有符號整數,將整數中的數字進行反轉。

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

注意:

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^31,  2^31 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。

這道題說簡單也簡單,說難也難。簡單在這道題很基礎,演算法是剛學計算機的同學就已經掌握的取餘演算法,重點就在32位有符號整數上。這一點也困惑我挺久。

描述的很清楚,INT_MAX,INT_MIN是包含在limit.h的檔案中,而且一些運算也在其中。

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) 
                return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) 
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

控制條件:(rev > INT_MAX/10 || ( rev == INT_MAX/10 && pop > 7))  是當所得rev > INT_MAX/10的時候,return 0,因為rev再乘10一定會越界。或者當rev == INT_MAX/10的時候,一旦最後的餘數大於 7 或者小於 -8 ,則退出迴圈。

刷 leetcode 還是蠻有趣的,燒死腦細胞。