力扣7. 整数反转

题目:

给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例:

解法

两种解法:一种是每一次切割末尾数后,判断if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)

其实num == INT_MAX / 10 && tmp > 7不用判断

原数是int类型数,int最大值和最小值的最高位是2。如果一个原数与int类型数的最大值或最小值的长度相等,那么这个数的最高位数也只能为1或2,那么它对应反数的最后一位也只能为1或2。int最大值的最后一位数为7,1或2肯定小于7;int最小值的最后一位数为-8, -1,-2肯定大于-8。

第二种是:每一次切割后,用tmp将num存起来,再看看num/10 和tmp是否相同。

代码

class Solution {
public:
    int myreverse(int x) {
        int num = 0;
        int tmp = 0;
        while (x != 0) {               
            tmp = x % 10;      
            if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)) return 0;
            if (num < INT_MIN/10 || (num == INT_MIN / 10 && tmp < -8)) return 0;
            num *=10;    
            num += tmp;
            x = x/10;               
        }
        return num;
    }
    int reverse(int x) {      
       return myreverse(x); 
    }
};
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页