原题链接
题目描述:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
golang
示例代码
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
func reverse(x int) int {
min := 1 << 31 * -1
max := 1 << 31 - 1
if x < min || x > max || x == 0 {
return 0
}
stack := []int{}
// 是否为负数,负数*-1转为正数
var flag bool
if x < 0 {
x = x * -1
flag = true
}
// 这一步是每次取数据的最后一位。如1234。num依次为4,3,2,1
for x > 0 {
num := x % 10
x = x / 10
stack = append(stack, num)
}
// 出栈
// 数字在第几位,正好是10的N - 1次方
var result int
for len(stack) > 0 {
length := len(stack) - 1
topNum := stack[0]
if flag {
// 负数相减
result -= topNum * int(math.Pow10(length))
} else {
// 正数相加
result += topNum * int(math.Pow10(length))
}
// 每次判断是否溢出,溢出直接返回即可
if result < min || result > max {
return 0
}
stack = stack[1:]
}
return result
}
|