分享
  1. 首页
  2. 文章

让我们一起啃算法----整数反

三斤和他的朋友们 · · 1099 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

整数反转(Reverse-Integer)

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

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣

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

解题思路

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

其中需要注意点有两个:

  • 负数和正数其实不用分类讨论,例如 -12310 取模得到的值是 -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


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:三斤和他的朋友们

查看原文:让我们一起啃算法----整数反

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1099 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏