題目
作者:gpe3DBjDS1
鏈接:https://leetcode-cn.com/problems/reverse-integer/
來源:力扣(LeetCode)
給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]。請根據(jù)這個假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 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
}
效率低,實現(xiàn)復(fù)雜
- 方法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
}
效率高,代碼簡潔