LeetCode之整数翻转超详细java讲解

 

 

描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)

思路:就是一般的整数翻转,不过需要注意两个check点。。。。(都是泪)

   1:整数可正可负,但是在这里面可以不用考虑,因为x为正数和负数的情况下的思路都是相同的。

      当x为正数时。将a=x%10,得到x的个位数。ret = ret*10+a。后面依次进行即可得到翻转后的整数。

                  例如:x=235

                 (5*10+3)*10+2=532.

      当x为负数时,这种思路也是成立的。

    2: 翻转过程中需要考虑溢出的情况。

       在x的翻转的过程中会出现溢出的情况,1199483674这个整数没超出int的范围-2^32~2^31,但是翻转的过程中会出现溢出。

 

   if(ret>Integer.MAX_VALUE/10 || ret<Integer.MIN_VALUE/10){
                       return 0;
                 }
ret>Integer.MAX_VALUE/10这个用来判断正数是否溢出,只需要判断到最大值的十分之一即可,因为当x的位数和int的最大值位数一样时,翻转后的最后面的一位
肯定不会超过int最大值的第一位,因为输入时的值已经被int限制了,不可能大于int最大值。
时间复杂度:O(1)
空间复杂度:O(1)


完整代码如下:
public int Reserve(int x){
    int ret = 0;
    while(x != 0){
        if(ret>Integer.MAX_VALUE/10 || ret<Integer.MIN_VALUE/10){
            return 0;
        }
        ret = ret*10 + x%10;
        x = x/10;
    }
    return ret;
}

 

 

 

2021-05-25


posted @ 2021-05-25 17:02  华sam  阅读(172)  评论(0编辑  收藏  举报