leetcode 7. 整数反转
题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例1:
输入:x = 123
输出:321
示例2:
输入:x = -123
输出:-321
示例3:
输入:x = 120
输出:21
示例4:
输入:x = 0
输出:0
解题思路:
题目需要判断反转后的数字是否超过 32 位有符号整数的范围 [-231, 231 - 1],例如 x=2123456789反转后res=9876543212 > 231-1 = 2147483647,超过了 32 位有符号整数的范围。因此我们需要在「推入」数字之前,判断是否满足-231 ≤ res⋅10+i ≤ 2 31 - 1若该不等式不成立则返回 0。
代码如下:
/**
* 执行结果:通过
* 执行用时:1 ms, 在所有 Java 提交中击败了99.72%的用户
* 内存消耗:35.5 MB, 在所有 Java 提交中击败了54.95%的用户
* 通过测试用例:1032 / 1032
*/
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
if (res< Integer.MIN_VALUE /10 || res > Integer.MAX_VALUE / 10) {
return 0;
}
int i = x % 10;
x /= 10;
res = res * 10 + i;
}
return res;
}
}