題目
作者:gpe3DBjDS1
鏈接:https://leetcode-cn.com/problems/reverse-integer/
來(lái)源:力扣(LeetCode)
給出一個(gè) 32 位的有符號(hào)整數(shù)莲镣,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)抢肛。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號(hào)整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]兜辞。請(qǐng)根據(jù)這個(gè)假設(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
}
效率低隅居,實(shí)現(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
}
效率高祖灰,代碼簡(jiǎn)潔