整数反转
给你一个 32 位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−2^31,2^31− 1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
思路
- 在本道题中整数反转,第一想法是将整数转换为字符串,反序遍历,然后再将字符串转换为整数。如解法一。
- 第二种想法是,使用取模运算,不用判断正负。这种题常用的方法是:通过取模10,获取个位的数字,然后相除10,然后获取下一个用来取模的数字。如解法二。
解法一
func reverse(x int) int {
isOk:=false // 定义正负标记变量
if x<0{ // 如果为负数,则赋值为正,并设置标记参数为true
x=-x
isOk=true
}
strX:=strconv.Itoa(x) // 将整数转换为字符串
resStr:=reverseStr(strX) // 将字符串翻转,并返回翻转后的结果
res,err:=strconv.Atoi(resStr) // 将翻转后的结果转换为整数
if err==nil{
if isOk{ //判断是否为负数,若为负数则加-号
res=-res
}
if res>=math.MinInt32&&res<=math.MaxInt32{ // 根据题意,若在此范围之内,则返回结果
return res
}
}
return 0 // 若不在上述范围,则返回0
}
func reverseStr(str string)string{ // 从后往前,遍历字符串。
res:=""
for i:=len(str)-1;i>=0;i--{
res=res+string(str[i])
}
return res
}
解法二
func reverse(x int) int {
ans := 0
for x != 0 {
if ans > math.MaxInt32/10 || ans < math.MinInt32/10 { // 如果超出范围,则返回0
return 0
}
ans = ans*10 + x%10 // 通过取模10,获取个位的数字
x /= 10 // 相除10,然后获取下一个用来取模的数字
}
return ans
}