7. 整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [$-2^{31}, 2^{31}$] 就返回 0

假设环境不允许存储 64 位整数(有符号或无符号)。

输入输出

1
2
3
4
5
6
7
8
输入:x = 123
输出:321

输入:x = -123
输出:-321

输入:x = 120
输出:21

基本思路

按照正常的思路 只需要逐位进行除法 取余 再乘以10 相加即可 如同以下:

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
int tmp = x % 10;
res = res * 10 + tmp;
x /= 10;
}
return res;
}
}

但是由于题目中要求:如果反转后整数超过 32 位的有符号整数的范围 [$-2^{31}, 2^{31}$] 就返回 0

如果测试用例为(可以自己写)1147483649 反转之后9463847411 就已经超过 $2^{31} = 2147483648$

所以需要在res阶段就判断是否大于2147483648

  • 如果res大于214748364 加tmp后边肯定更大
  • 如果res等于214748364 必须判断tmp是否大于7
  • 负数的话同理 判断

java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int reverse(int x) {
int res = 0;
while(x != 0){
int tmp = x % 10;

if(res > 214748364 || (res == 214748364 && tmp > 7))
return 0;
if(res < -214748364 || (res == -214748364 && tmp < -8))
return 0;

res = res * 10 + tmp;
x /= 10;

}

return res;
}
}