一.前言
重新开始刷题的感觉就是好,觉得自己每天都有进步,虽然可能都是幻觉,但是只要自己坚定不移的走下去,总有一天,菜鸟也会成为大神的。
二.题目
题目:给出一个 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 }
这就是本次的题目,是不是非常简单呢!不管遇到难题还是简单的题,我们只要敢于面对,坚持刷题,都能成功的!