将给出的整数x翻转_让我们一起啃算法----整数反转

整数反转(Reverse-Integer)

这是一个比较简单的题目,题干如下:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123

输出: 321

示例 2:

输入: -123

输出: -321

示例 3:

输入: 120

输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:力扣

我觉得这个题目的考点在于让你有个意识:数字类型是有可能溢出的。

解题思路

这个题整体的思路就是:与10取模,再与10相除取整,往复循环直至目标值为0,流程图如下:

e28e9181016f96d9c688aae47b13533b.png

其中需要注意点有两个:

负数和正数其实不用分类讨论,例如 -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

}

总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值