题目
Given a 32-bit signed integer, reverse digits of an integer.
也就是要反转一个数字,比如123变成321、-123变成-321。但是有一个要注意的地方,数字一定要在32位的有符号数字范围内,要是不在范围内的话,返回0
解法
解法1
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
| func reverse(x int) int {
if x >= math.MaxInt32 || x <= math.MinInt32 {
return 0
}
i := 10
num := make([]int, 0)
for {
rem := x % i
num = append(num, rem/(i/10))
if rem == x {
break
}
i *= 10
}
result := 0
for n, v := range num {
result += v * int(math.Pow(10, float64(len(num)-1-n)))
}
if result >= math.MaxInt32 || result <= math.MinInt32 {
return 0
}
return result
}
|
解法2
1
2
3
4
5
6
7
8
9
10
11
12
13
| func reverse2(x int) int {
var result int32 = 0
for x != 0 {
tail := int32(x) % 10
newResult := result*10 + tail
if (newResult-tail)/10 != result { //overflow,因为从数学来考虑,这个等式是肯定相等的。如果不相等,就出现了数字超过范围的情况了
return 0
}
result = newResult
x /= 10
}
return int(result)
}
|
总结
- 解法2比解法1少调用一个slice去保存数据
- 解法2在处理数字超过范围的问题上更简单