一.前言

  重新开始刷题的感觉就是好,觉得自己每天都有进步,虽然可能都是幻觉,但是只要自己坚定不移的走下去,总有一天,菜鸟也会成为大神的。

二.题目

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

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

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

  示例3:输入: 120
       输出: 21

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

三.解题思路

  这个题目难度是easy,所以做起来也十分简单,就只有溢出的情况需要注意下,不过我们还是来分析一下。首先将整数进行反转,就是把低位转换为高位,我们可以利用%10运算,每次获取整数的最低位(pop),利用/10的运算,去掉整数的最低位,然后用一个变量保存每次获取的最低位,保存时先进行*10操作,将原来保存的结果扩大十倍,再加上本次计算的最低位,result = result * 10 + pop。而我们的溢出就会在result = result * 10 + pop 这个操作中可能出现,所以我们要进行判断。

  溢出情况 : 1. result * 10 > 2^31 - 1

                           2. result * 10 + pop > 2^31 -1

                           3.result * 10 <  - 2^31

                           4.result * 10  + pop < -2^ 31

  代码如下:

 1 class Solution {
 2     public int reverse(int x) {
 3         int result = 0;
 4         while (x != 0){
 5             int pop = x % 10;
 6             x /= 10;
 7             if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE - result*10)){
 8                 return 0;
 9             }
10             if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && pop > result*10 - Integer.MIN_VALUE)){
11                 return 0;
12             }
13             result = result * 10 + pop;
14         }
15         return result;
16     }
17 }

   这就是本次的题目,是不是非常简单呢!不管遇到难题还是简单的题,我们只要敢于面对,坚持刷题,都能成功的!

01-18 13:02