整数反转
给你一个 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
提示:
-2的31次方 <= x <= 2的31次方 - 1
思路
图解
考点在于 如何处理边界问题
2的-31次方为 2147483648
2的31次方-1 为 2147483647
当反转过来的数组,超出边界的时候,直接返回0.
如何写边界
大于 7位数 214748364
or刚好 符合 7位数 214748364 第八位的时候 大于 7
小于 7位数 -214748364
or刚好 符合 7位数 -214748364 第八位的时候 小于 8
代码
/**
32位整数 范围 [−2^31, 2^31 − 1]
小于 -214748368
大于 2147483647
*/
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
int temp = x % 10;
if (res > 214748364 || (res == 214748364 && temp > 7)){
return 0;
}
if (res < -214748364 || (res == 214748364 && temp < -8)){
return 0;
}
res = res * 10 + temp;
x /= 10;
}
return res;
}
}
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0){
int digit = x % 10;
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE && digit < -8){
return 0;
}
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE && digit > 7)){
return 0;
}
res =res * 10 + digit;
x /= 10;
}
return res;
}
}
Reference
https://leetcode.cn/problems/reverse-integer