整数反转(Reverse-Integer)
这是一个比较简单的题目,题干如下:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣
我觉得这个题目的考点在于让你有个意识:数字类型是有可能溢出的。
解题思路
这个题整体的思路就是:与10取模,再与10相除取整,往复循环直至目标值为0,流程图如下:
其中需要注意点有两个:
- 负数和正数其实不用分类讨论,例如 -123 与 10 取模得到的值是 -3,与正数的处理逻辑是一致。
- 溢出的判断,我这里采用了一个 倒推思路 :例如 C = A + B,那么如果没有溢出 可以得到 A = C - B,但是溢出了就 得到 A != C - B。
具体的代码实现
GO语言实现:(建议配合上面的解题思路看代码)
func reverse(x int) int {
var (
result = 0
)
// x为正负数不用分类讨论。
// 因为:-123 % 10 = -3,与正数的处理逻辑一致
for x != 0 {
mod := x % 10
newResult := result*10 + mod
// 倒推思路: C = A + B,如果没有溢出 A = C - B,溢出之后 A != C - B
if (newResult-mod)/10 != result {
return 0
}
result = newResult
// 去掉最后一位
x = x / 10
}
return result
}
总结
每天进步一点点,加油!
算法教程项目,每天更新一题,点个 star 支持一下呀:
https://github.com/wx-satellite/learning-algorithm
有疑问加站长微信联系(非本文作者)