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

如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。

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

思路

  1. 难点在于判断溢出的情况
  2. -2^31 = -2147483648,反转后结果会溢出,直接返回 0 即可
  3. 先记录符号而后标准化为正数进行解题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var reverse = function (x) {
if (x === -1 << 31) {
return 0
}
let result = 0
const factor = x > 0 ? 1 : -1
x = Math.abs(x)
const maxVal = (1 << 30) - 1 + (1 << 30)
while (x > 0) {
const val = x % 10
if ((maxVal - val) / 10 < result) {
return 0
}
result = 10 * result + val
x = Math.floor(x / 10)
}
return factor * result
}