leetcode刷题笔记(二)
7. 整数反转
解法一:
321%10=1
321/10=32
32%10=2
32/10=3
3%10=3
用10对x取余,每取完一次,将x除10,每次循环就能从后往前取数字,然后存入到数组中。计算数组长度,通过乘法再相加,将其还原成数字。
其它限制条件通过几个if语句完成。
func reverse(x int) int {
flag := 1
if x<0 {
x *= -1
flag = -1
}
sum := make([]int,0)
var ans int
for i := 0;; i++ {
sum = append(sum, x%10)
if x<10 {
break
}
x = x/10
}
y:=1
for i := 1; i < len(sum); i++ {
y *= 10
}
for _, i2 := range sum {
ans += i2*y
y /= 10
}
ans *=flag
if ans > 2147483647 {
return 0
}
if ans < -2147483648{
return 0
}
return ans
}
优化的方法:
只是免去了数组操作,通过自乘10再操作,省去了放入数组再拿出操作的过程,还无需判断正负再操作。
同时进行类型强制转换后的判断,用另一种方式使溢出可知
func reverse(x int) int {
var ans int64
y := int64(x)
for{
ans = ans * 10 + y % 10
y = y / 10
if y == 0 {
break
}
}
result := int32(ans)
if int64(result) == ans{
return int(ans)
}else {
return 0
}
}