1. 题目
注:int32的范围 :-2147483648 ~ 2147483647
2. 题解
单纯的反转难度不大,重点在于不使用64位整数的条件下,判断反转后的数字是否超出32位整数的范围。设最大,最小整数分别为 INTmax 和 INTmin,原整数为 a 反转后的整数为 rev,则rev满足:
整个解题思路如下:
(1)数字反转:反转的实现较为简单,基本循环如下:rev = rev*10 + a%10;a = a/10
(2)范围判断:将 rev 拆分为 ,满足以下条件时,整数未超界
且
考虑到当等号满足时,a 的最高位即 digit 为2 ,必属于[-8,7],所以范围判断只要满足
即可。
代码实现如下:
func reverse(x int) int {
var minBoundary, maxBoundary int = math.MinInt32/10, math.MaxInt32/10
var rev int = 0
for i:=x; i!=0; i=i/10{
if minBoundary<=rev && rev<=maxBoundary{
rev = rev*10 + i%10
}else{
return 0
}
}
return rev
}
提交结果: