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

猜你喜欢

转载自blog.csdn.net/sinat_15723179/article/details/81147017