加一

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]

输出: [1,2,4]

解释: 输入数组表示数字 123。

示例 2:s

输入: [4,3,2,1]

输出: [4,3,2,2]

解释: 输入数组表示数字 4321。

这道题做了挺长时间, 主要是第一次的思路没有考虑到数组所表示的整数可能会溢出的情况. 傻傻的把数组转换成整数, 加1之后又转换为数组.

所以这道题主要在于两点:

  1. 整数溢出的问题
  2. 如何处理每一位的进位的问题

我的思路是, 设置另一个切片result存储相加之后的整数. 关于切片的长度, 是这样确定的, 如果原数组digits每一位都是9的话,

也就是说整数最高位会产生进1, 那么result的长度就是digits长度加1. 否则, result的长度就是digits的长度.

使用carry表示进位(0或者1). 第一步先计算digits和result的最高位, 得到一个初始的carry.

然后使用循环计算digits和result的每一位, 每一位的进位都取决于上一位相加得到的值, 如果该值大于10, 进位=1, 否则进位=0


func plusOne(digits []int) []int {
var carry int = 0
var overflow int = 0
var len2 int = 0 len1 := len(digits)
for i := 0; i < len1; i++ {
if digits[i] == 9 {
overflow++
}
} if overflow == len1 {
len2 = len1 + 1
} else {
len2 = len1
} result := make([]int, len2) digits[len1-1] += 1
result[len2-1] = digits[len1-1] % 10
if digits[len1-1] >= 10 {
carry = 1
} for i, j := len1 - 2, len2 - 2; i >= 0 || j >= 0; {
//防止下标i越界
if i >= 0 {
digits[i] += carry
if digits[i] >= 10 {
carry = 1
} else {
carry = 0
}
result[j] = digits[i] % 10
}
//当最高位需要进位时
if len1 < len2 && j == 0 {
result[j] = 1
break
} i--;
j--;
} fmt.Println(result) return result
} func main() {
digits := []int{1, 2, 3}
plusOne(digits)
//fmt.Println(result)
}

golang刷Leetcode系列 --- 加1的更多相关文章

  1. golang刷Leetcode系列 --- 实现strStr()

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  2. 用golang刷LeetCode

    用golang刷LeetCode 用Go语言刷LeetCode记录,只是为了练习Go语言,能力有限不保证都是最优解,只能在此抛转引玉了. 数据结构和算法 数据结构和算法是程序员的命根子,没了命根子也就 ...

  3. 图解leetcode5-10 | 和233酱一起刷leetcode系列(2)

    本周我们继续来看5道磨人的小妖精,图解leetcode6-10- 多说一句,leetcode10 杀死了233酱不少脑细胞... 另: 沉迷算法,无法自拔.快来加入我们吧! 别忘了233酱的一条龙服务 ...

  4. C#刷遍Leetcode系列连载 索引

    C#刷遍Leetcode系列文章 索引 索引(陆续发布中,请保持关注) C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - ...

  5. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  6. 用JavaScript刷LeetCode的正确姿势

    虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码.走过路过 ...

  7. 用 JavaScript 刷 LeetCode 的正确姿势【进阶】

    之前写了篇文章 用JavaScript刷LeetCode的正确姿势,简单总结一些用 JavaScript 刷力扣的基本调试技巧.最近又刷了点题,总结了些数据结构和算法,希望能对各为 JSer 刷题提供 ...

  8. Go 的 golang.org/x/ 系列包和标准库包有什么区别?

    在开发过程中可能会遇到这样的情况,有一些包是引入自不同地方的,比如: golang.org/x/net/html 和 net/html, golang.org/x/crypto 和 crypto. 那 ...

  9. Leetcode系列之两数之和

    Leetcode系列之两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你 ...

随机推荐

  1. Java中避免空指针的几个方法

    equals Object类中的equals 方法在非空对象引用上实现相等关系,具有对称性 x.equals(y) 和 y.equals(x) 结果是一样的,但当x == null时会抛出空指针异常 ...

  2. File中mkdir()和mkdirs()的区别

    mkdir() 创建此抽象路径名指定的目录.只能在已经存在的目录中创建文件夹 如: File folder = new File("d:\\test1\\test2"); fold ...

  3. QQ 聊天机器人小薇发布!

    简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息,发现有"感兴趣"的内容时通过图灵机器人进行智能回复 监 ...

  4. 03_ActiveMQ安全机制

    [ActiveMQ安全机制] [ ActiveMQ的web管理界面 ] 地址  http://127.0.0.1:8161/admin ActiveMQ管理控制台使用jetty部署,所以需要修改密码, ...

  5. 【Udacity笔记】What is Machine Learning?

    Teaching computers to learn to perform tasks from past experiences(recorded data) 一.Decision Tree(决策 ...

  6. QT 定时执行某个函数,隐藏某个控件

    QTimer::singleShot(3000, this, SLOT(slotHideFinishedLabel())); // 这里是一个3秒定时器, 且只执行一次. #include " ...

  7. 比特币钱包Armory使用指南

    转自:http://news.yibite.com/application/2014/0525/21603.shtml 比特币钱包Armory(https://bitcoinarmory.com/)是 ...

  8. html5自我总结

    2017年7月30日 合抱之木,生于毫末.九层之台,起于累土.软件行业要熟记和训练的东西有很多,在此,写一下如何快速搭建html及自我见解(这里只介绍我自己用到的,还有部分存在但是用不到的就不讲解了) ...

  9. Linux 学习笔记之关机问题

    在linux领域内大多用在服务器上,很少遇到关机的操作. 正确的关机流程为:sync > shutdown > reboot > halt 关机指令为:shutdown ,你可以ma ...

  10. python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...