leetcode:整数反转

题目

作者:gpe3DBjDS1
链接:https://leetcode-cn.com/problems/reverse-integer/
来源:力扣(LeetCode)

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

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

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

解法

  • 方法1
func reverse(x int) int {
    tmp := make([]int, 0)
    var result, a int
    var flag bool

    if x < 0 {
        x = int(math.Abs(float64(x)))
        flag = true
    }

    for x > 0 {
        a = x / 10
        value := x % 10

        if value > 0 {
            tmp = append(tmp, value)
        } else {
            if len(tmp) != 0 {
                tmp = append(tmp, value)
            }
        }

        x = a
    }

    length := len(tmp)

    for index, value := range tmp {
        powValue := math.Pow10(length - index - 1)
        i := int(powValue)

        result = result + value*int(i)
    }

    max := int(math.Pow(2, 31))

    if result > max {
        result = 0
    }

    if flag {
        result = result * (-1)
    }

    return result
}

效率低,实现复杂

  • 方法2
func reverse1(x int) int {
    y := 0
    for x != 0 {
        y = y * 10 + x % 10
        if !(-(1 << 31) <= y && y <= (1 << 31)-1) {
            return 0
        }

        x = x / 10
    }

    return y
}

效率高,代码简洁

你可能感兴趣的:(leetcode:整数反转)