作预检测就好了呀
我们的返回结果肯定是这样子的变化,比如返回结果定义ans,目标整数是x
每次的变化是
bit = x%10 // 拿到低位
x/=10
ans = ans*10+bit // 加入ans的高位
// 溢出检测就可以在ans=ans*10+bit之前做
本质上是 ans*10+bit > maxInt32 => ans > (maxInt32-bit)/10
代码可以这样写:
func reverse(x int) int {
neg := false
// 只检查正溢出
if x < 0 {
neg = true
x = -x
}
ans := 0
for x > 0 {
bit := x % 10
x /= 10
// 检查溢出
if ans > (math.MaxInt32-bit)/10 {
// 溢出
return 0
}
ans = ans*10 + bit
}
if neg {
return -ans
}
return ans
}