原题链接

题目描述:

给你一个 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
}