文章目录
- 7. 整数反转
- 解题思路
- Go代码
7. 整数反转
7. 整数反转
给你一个 32
位的有符号整数 x
,返回将 x
中的数字部分反转后的结果。
如果反转后整数超过 32
位的有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1] ,就返回 0
。
假设环境不允许存储 64
位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
- − 2 31 < = x < = 2 31 − 1 -2^{31} <= x <= 2^{31} - 1 −231<=x<=231−1
解题思路
直接操作数字麻烦,我们可以改成操作字符切片
注意
:字符串为常量,无法就地翻转,故使用字节切片方便一点,另外注意一下正负号和不要越界就好啦
Go代码
func reverse(x int) int {// 直接操作数字麻烦,我们可以改成操作字符切片// 注意:字符串为常量,无法就地翻转,故使用字节切片方便一点flag := false // 正负号的标记if x < 0 {flag = true}// 转为字符切片,方便后续翻转s := []byte(fmt.Sprintf("%d",x))if flag {s = s[1:] // 先不考虑负号}// 翻转字符串left,right := 0,len(s) - 1for left < right {s[left],s[right] = s[right],s[left]left++right--}// 转回数字结果res := string(s)if flag {res = "-" + res // 将负号加回来} num,err := strconv.Atoi(res)if err != nil {return 0 }// 越界返回0if num > math.MaxInt32 || num < math.MinInt32 {return 0}return num
}