LeedCode(7) 整数反转

2019-08-14  本文已影响0人  桃花岛张岛主

题目:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路:

如果不用到其他容器,每次都要获取最后一位的数字,方法是与10取余,然后与之前的结果相加,因为新加一位数字,那个之前的结果就要进一位,所以要乘以10。
因为是int类型,所以每次在相加之前就要判断运算后的数据是否超出范围,如果超出直接返回0;

代码如下:

···
public int reverse(int x) {
//结果
int result = 0;

    while(x != 0){
        //最后一位数
        int num = x%10;
        x = x/10;
        //如果大于最大值  则会走这里
        if(Integer.MAX_VALUE/10 < result || (Integer.MAX_VALUE/10 == result && num > Integer.MAX_VALUE%10) ){
            return 0;
        }else if(Integer.MIN_VALUE/10 > result || (Integer.MIN_VALUE/10 == result && num < Integer.MIN_VALUE%10)){
            //如果小于最小值  则会走这里
             return 0;
        }
        
        result = result*10 +num;
    }
    return result;
    
    
}

···

复杂度分析

时间复杂度:O(log(x)) x为入参,
空间复杂度:O(1)

注:

判断是否超出范围,也可使用Long类型。

上一篇下一篇

猜你喜欢

热点阅读