加一

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

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

你可以假设除了整数 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. iview框架modal中嵌套modal

    modal的使用是平级的,后面的会覆盖前面,如下<modal>111</modal><modal>222</modal>内容为222的弹框会在内容为11 ...

  2. set(string str)变量传参为int的问题

    if (bo.getAnesthesiaMode() != null) { if (bo.getAnesthesiaMode() != null) { CodeMstrCoMpare codeMstr ...

  3. springmvc中配置RESTful风格控制器

    一般的http请求中其实只需要get和post就可以满足项目需求了,而为什么还要使用restful可能就是为了使请求url看起来更加直观,好看吧.. restful常用的请求方式:get,post,p ...

  4. spring----面试题

    1.什么是Spring beans? Spring beans 是那些形成Spring应用的主干的java对象.它们被Spring IOC容器初始化,装配,和管理.这些beans通过容器中配置的元数据 ...

  5. python vscode在centos下安装

    对于centos则如下: sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e ...

  6. 正则去除html标签属性保留指定标签

    /// <summary> /// 去除标签里面的属性保留IMG标签属性 /// </summary> /// <param name="strText&quo ...

  7. sqlserver根据条件生成插入语句--单表

    ALTER proc [dbo].[proc_insert] (@tablename varchar(256),@where varchar(max))asbeginset nocount ondec ...

  8. Service Discovery in WCF 4.0 – Part 1 z

    Service Discovery in WCF 4.0 – Part 1 When designing a service oriented architecture (SOA) system, t ...

  9. python全栈学习笔记(二)网络基础之子网划分

    阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...

  10. 【转】Linux中/etc/profile,/etc/bashrc,~/.profile,~/.bashrcd的区别

    //因为在原文章中博主说以下内容是网友说的,所以我就只加个转了,找不到原作者 /etc/profile,/etc/bashrc 是系统全局环境变量设定 ~/.profile,~/.bashrc用户家目 ...