【LeetCode】7. 整数反转

161 阅读1分钟

整数反转

给你一个 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
}