题目
作者: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
}
效率高,代码简洁