LeetCode——整数翻转

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

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

代码分析:

     一个32位的有符号整数再经过翻转之后,可能会存在溢出(也就是超出了int的范围)的问题,所以我们要对这个问题进行处理;

那么我们就要思考什么时候会溢出呢?

经过分析,溢出有两种情况,一种是大于Integer.MAX_VALUE,另一种是小于Integer.MIN_VALUE,两种情况类似,所以我们分析一种即可;

我们在这里分析第一种情况;

   result = result*10 + last;

   result 为正值的情况下,如果 result 大于 Integer.MAX_VALUE / 10,那么就一定会溢出,如果 result 等于 Integer.MAX_VALUE / 10,那么,last如果大于 Integer.MAX_VALUE % 10 也会产生溢出的情况。相反的,如果 result 为负值,也是一样的原理;

Integer.MAX_VALUE是(2^31)-1也就是2147483647

Integer.MIN_VALUE是-2^31也就是-2147483648

代码中会写last>7   last<-8的原因是,Integer.MAX_VALUE和Integer.MIN_VALUE分别%10后的结果分别是7和-8;

此外还要注意的一点是  result = result*10 + last 这条语句的位置应该放在判断溢出的后面;

若放在前面,若result是没有溢出的数,且result和Integer.MAX_VALUE或Integer.MIN_VALUE的位数相同,则会出现返回0的情况,因为此时result一定是满足  >Integer.MAX_VALUE/10或者   <Integer.MIN_VALUE/10的。

class Solution {
    public int reverse(int x) {
        int result = 0;
        while(x!=0){
            int last = x % 10;//得到整数x的最后一位
            x = x / 10;

            /*两种溢出情况*/
            if((result>Integer.MAX_VALUE/10)||(result==Integer.MAX_VALUE/10 && last > 7))
                return 0;
            if((result<Integer.MIN_VALUE/10)||(result==Integer.MIN_VALUE/10 && last <-8))
                return 0;   
             result = result*10 + last;
        }
        return result;
        
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值