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...)
}


目录
相关文章
|
算法
LeetCode-122. 买卖股票的最佳时机 II(Goland实现)
LeetCode-122. 买卖股票的最佳时机 II(Goland实现)
188 0
LeetCode-剑指 Offer 03. 数组中重复的数字(Goland实现)
LeetCode-剑指 Offer 03. 数组中重复的数字(Goland实现)
218 0
|
算法
LeetCode-136. 只出现一次的数字(Goland实现)
LeetCode-136. 只出现一次的数字(Goland实现)
93 0
LeetCode-53. 最大子序和(Goland实现)
LeetCode-53. 最大子序和(Goland实现)
113 0
LeetCode-409. 最长回文串(Goland实现)
LeetCode-409. 最长回文串(Goland实现)
112 0
LeetCode-58. 最后一个单词的长度(Goland实现)
LeetCode-58. 最后一个单词的长度(Goland实现)
100 0
LeetCode-38. 外观数列(Goland实现)
LeetCode-38. 外观数列(Goland实现)
103 0
LeetCode-88. 合并两个有序数组(Goland实现)
LeetCode-88. 合并两个有序数组(Goland实现)
106 0
LeetCode-459. 重复的子字符串(Goland实现)
LeetCode-459. 重复的子字符串(Goland实现)
112 0
|
机器学习/深度学习
LeetCode-104. 二叉树的最大深度(Goland实现)
LeetCode-104. 二叉树的最大深度(Goland实现)
102 0