7. 反轉整數(簡單題)
阿新 • • 發佈:2019-01-03
給定一個 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 還是蠻有趣的,燒死腦細胞。