LeetCode-007-整数反转

1. 题目:

整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

1
2
输入: 123
输出: 321

示例 2:

1
2
输入: -123
输出: -321

示例 3:

1
2
输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

2. 解题:

核心就是除10模10。但是注意两个问题:负数和溢出。

对于负数,我们使用flag变量存符号,然后取其绝对值;

对于溢出,我们利用Java的溢出机制(不抛出异常和错误,但是变成一个其他数),将res*10后再和该值除以10比较,看是否相同。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int reverse(int x) {
int flag = (x > 0) ? 1 : -1;
x = (x > 0) ? x : x*-1;
int res = 0;
int temp = 0;

while(x > 0) {
res *= 10;
if (res / 10 != temp) {
return 0;
}
res += x%10;
temp = res;
x /= 10;
}

return res*flag;
}
}