一.题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-2^31 <= x <= 2^31 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二.题解
package sdnu.com.leetcode7;
/**
* Integer inversion
*
* @author Beyong
* @date 2021/05/20 23:28
*/
public class Solution {
public static void main(String[] args) {
System.out.println(reverse(120));
}
/**
*
* @author Beyong
* @date 2021/05/20 23:42
* @param x
* @return int
*/
public static int reverse(int x) {
int result = 0;
while(x != 0){
int tempInteger = x % 10;
if(result > 214748364 || (result == 214748364 && tempInteger > 7)){
return 0;
} else if (result < -214748364 || (result == -214748364 && tempInteger < -8)){
return 0;
}
x /= 10;
result = result * 10 + tempInteger;
}
return result;
}
}
只要我们的result大于前九位组成的数,无论第十位是什么,我们的result一定会溢出,当我们的result等于前九位组成的数,我们就需要比较第十位是否比7大,如果比7大,那么我们的result就会溢出,反之没有。
类似的,只要我们的result小于前十位(包括运算符)组成的数,无论第十一位是什么,我们的result一定会溢出,当我们的result等于前十一位组成的数,我们就需要比较第十一位是否比-8小,如果比-8小,那么就溢出,反之没有。
注意体会result = result * 10 + tempInteger;
我们的数字不断加在后面,导致前面的数字都进一位。
作者:Beyong
出处:Beyong博客
github地址:https://github.com/beyong2019
本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。