【LeetCode系列】反轉整數 Reverse Integer

題目要求很簡單,就是翻轉整數。唯一需要留意的地方是題目中提到假設只能存儲32位的整數,也就是說在判斷是否溢出時不能用long類型的變量來判斷是否溢出。

解決方式如下:

class Solution {
public:
    int reverse(int x) {
        int result = 0;
        while(x != 0){
            int r = result * 10 + x % 10;
            if(r / 10 != result){   //判斷是否溢出,本來應該是(r - x % 10) / 10 != result,由於x % 10總是小於10的數,對結果無影響,所以在此刪去
                return 0;
            }
            result = r;
            x /= 10;
        }
        return result;
    }
};

這裏判斷溢出的方法是判斷算出來的 r 和逆運算回去的 result 是否相等。因爲如果 r 的值溢出,則會有損失,值會不同。

 

解法二:

class Solution {
public:
    int reverse(int x) {
        int result = 0;
        while (x != 0) {
            if (abs(result) > INT_MAX / 10) return 0;
            result = result * 10 + x % 10;
            x /= 10;
        }
        return result;
    }
};

這個解法中的判斷溢出是在result進行下一次運算之前判斷的,也就是說假如 result 的絕對值大於 INT_MAX / 10,那麼下一行的 result = result * 10 + x % 10 必定會溢出。(INT_MAX的值爲214748364)假如result的絕對值沒有大於 INT_MAX / 10,假設爲214748364,因爲 x 是整數,一定會在整數範圍-2147483648~2147483647之間,那麼當取到極限位數(10位)時,x 的第一位數一定是1或者2,此時執行 result = result * 10 + x % 10 一定不會溢出(此時 x % 10 爲1或者2)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章