class="markdown_views prism-github-gist">
7. 整数反转-E
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
-
分析
因为取模对于正负数都可用,所以无需担心符号问题;但对于溢出问题,确实需要考虑;本题,解决的是伪溢出问题,函数参数是64位的int,但输入是32位的数据,所以就可以将反转数的绝对值和32位中的最大值想比较;
另外,有一个未经完整验证的方法,即bk:=ret,ret*=10后若溢出,那么很大概率上ret/10应该发生变化,所以可以判断bk和ret/10是否相等,判断是否溢出;
若要更高精确,可用数组存储数字,通过数字比较查看是否发生变化,判断是否溢出。
-
code1
var max int=2147483647
func reverse(x int) int {
ret:=0
for x!=0{
ret=ret*10+x%10
if ret>max||-ret>max{
return 0
}
x/=10
}
return ret
}
func reverse(x int) int {
ret:=0
for x!=0{
bk:=ret
ret=ret*10+x%10
if ret/10!=bk{
return 0
}
x/=10
}
return ret
}