7. 整数反转(简单)

题目

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

示例1:

1
2
输入: 123
输出: 321

示例2:

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

示例3:

1
2
输入: 120
输出: 21

注意:

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

思路

循环取余

关键点

  • 边界处理

复杂度

  • 时间复杂度:O(N)
  • 空间复杂度:O(1)

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func reverse(x int) int {
if x > -10 && x < 10 {
return x
}
const max31 = (1<<31 - 1) / 10

minus := 1
if x < 0 {
minus = -1
x *= -1
}
var result int
for x != 0 {
val := x % 10
switch {
case result > max31 ||
result == max31 && minus == 1 && val > 7 ||
result == max31 && minus == -1 && val > 8:
return 0
}
result = result*10 + val
x /= 10
}
return result * minus
}