LeetCode top interviewed 7. 反轉整數

題目描述:

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

示例 1:

輸入: 123
輸出: 321

 示例 2:

輸入: -123
輸出: -321

示例 3:

輸入: 120
輸出: 21

注意:

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

 

思路:就是不斷的取餘和整除,然後構造新的值。不論是構造還是把負數換成正數,都要注意防止溢出,即構造一個更大的臨時變量。

代碼如下:

class Solution {
public:
    int reverse(int x) {
        if(x>=-9 && x<=9)
            return x;
        
        long long new_x=x;
        if(x<0)
            new_x=-new_x;
        
        vector<int> bits;
        int rest=0, times=0;
        while(new_x!=0){
            rest = new_x%10;
            bits.push_back(rest);
            times++;         
            new_x=new_x/10;
        }
        
        long long new_v = 0, j=1;
        for(int i=times-1; i>=0; --i){
            new_v += bits[i]*j;
            j=j*10;
        }
        
        if(x>=0){
            if(new_v>INT_MAX)
                return 0;
        }
        else{
            new_v=-new_v;
            if(new_v<INT_MIN)
                return 0;
        }
        
        return new_v;
    }
};

 

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