LeetCode-66. 加一(Goland实现)

简介: LeetCode-66. 加一(Goland实现)

题号:66. 加一


题目描述:

      给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

题意解析:      

根据题意加一,没错就是加一这很重要,因为它是只加一的所以有可能的情况就只有两种:

  1. 除 9 之外的数字加一;
  2. 数字 9。

加一得十进一位个位数为 0 加法运算如不出现进位就运算结束了且进位只会是一。所以只需要判断有没有进位并模拟出它的进位方式,如十位数加 1 个位数置为 0,如此循环直到判断没有再进位就退出循环返回结果。然后还有一些特殊情况就是当出现 99、999 之类的数字时,循环到最后也需要进位,出现这种情况时需要手动将它进一位。

示例1:


输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123  ==> 123 + 1 = 124


示例2:


输入: [8,9,9,9]
输出: [9,0,0,0]
解释: 输入数组表示数字 8999  ==> 8999 + 1 = 9000
复制代码


优化前:思路清晰 ,浅显易懂


网络异常,图片无法展示
|



func plusOne(digits []int) []int {
  if len(digits) == 0 {
    return nil
  }
        //目的在:用于首位插入1 防止首位需要9进10 的情况
  var l = []int{1}
        //判断末尾不是9 不需要进位的情况 只需最后一位元素加1反正即可
  if digits[len(digits)-1] < 9 {
    digits[len(digits)-1]--
    return digits
  }
  //标记进位,由于第一次肯定需要进位,则初始flag为1
        var flag = 1
        //以下是处理末尾是9 需要进位的情况
  for i := len(digits) - 1; i >= 0; i-- {
    b := isPut(digits[i] + flag)
    //说明需要进位
    if b {
      flag = 1
      digits[i] = 0
                        //处理首位是9需要进位的情况
      if i-1 < 0 {
        digits = append(digits[:0], append(l, digits[0:]...)...)
        break
      }
    } else {
                       //不需要进位
      digits[i] = digits[i] + flag
      flag = 0
    }
  }
  return digits
}
//校验是否需要进位
func isPut(num int) bool {
  if num == 10 {
    return true
  }
  return false
}


优化后:代码简洁高效,双百法,思路清奇!秒啊!!

思路来源:LeetCode题友分享


解析:省略掉中间进位标记,直接判断是否为9 ,为9说明需要进1 直接将当前值变为0即可,不为9 直接return,


网络异常,图片无法展示
|



func plusOne(digits []int) []int {
  l := len(digits)
    var one = []int{1}
  if l == 0 {
    return nil
  }
  for i := l-1; i>= 0; i-- {
    if digits[i] != 9 {
      digits[i]++
      return digits
    } else {
      digits[i] = 0
    }
  }
        //直接将1插入首位
  return append(one, digits...)
}


目录
相关文章
|
22天前
|
Go
golang力扣leetcode 668.乘法表中第k小的数
golang力扣leetcode 668.乘法表中第k小的数
19 0
|
22天前
|
Go
golang力扣leetcode 462.最少移动次数使数组元素相等II
golang力扣leetcode 462.最少移动次数使数组元素相等II
38 0
|
22天前
|
Go
golang力扣leetcode 301.删除无效的括号
golang力扣leetcode 301.删除无效的括号
37 0
|
22天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
15 1
|
22天前
|
Go
golang力扣leetcode 937.重新排列日志文件
golang力扣leetcode 937.重新排列日志文件
31 0
|
22天前
|
Go
golang力扣leetcode 32.最长有效括号
golang力扣leetcode 32.最长有效括号
25 0
|
22天前
|
Go
golang力扣leetcode 2245.转角路径的乘积中最多能有几个尾随零
golang力扣leetcode 2245.转角路径的乘积中最多能有几个尾随零
25 0
|
22天前
|
Go Windows
golang力扣leetcode 388.文件的最长绝对路径
golang力扣leetcode 388.文件的最长绝对路径
22 0
|
22天前
|
Go
golang力扣leetcode 1332. 删除回文子序列
golang力扣leetcode 1332. 删除回文子序列
15 0
|
22天前
|
Go
golang力扣leetcode 38.复制带随机指针的链表
golang力扣leetcode 38.复制带随机指针的链表
18 0

热门文章

最新文章