LeetCode腾讯精选50题--整数反转

题目:

 

 分析:

  题目很简单明了,无非就是把数字倒叙输出,这里用到栈的思想   即从栈尾弹出   压入另一个栈

  但题目增加了限制条件,当得到的数不在【-2^31,2^31-1】范围内时,直接返回0,这就需要在编写的时候增加判断条件

  我们用数学的思维来思考这个限制

  即 -2^31 <= rev * 10 + digit <= 2^31 - 1       知INT_MAX = 2^31 - 1

  对INT_MAX进行变化    

 

 把其代入上式,加上判断分析

 

 又因为由题意,给出的x可以和INT_MAX位数相等且INT_MAX 的最高位为2  即digit<=2

 

 代码:

class Solution {
    public int reverse(int x) {
      int rev = 0;
      while(x != 0){
          if(rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10){   //超出数据范围,直接返回0
              return 0;
          }
          int digit = x % 10;    //求余  注意  负数求余  -18 % 10 = -8;
          x = x / 10;
          rev = rev * 10 + digit;
          
      }
      return rev;
    }
}

 

posted @ 2022-09-16 09:49  [吃瓜][吃瓜]  阅读(22)  评论(0)    收藏  举报