数组「5」加一 | 刷题打卡

136 阅读2分钟

前言

马上就春暖花开了,希望期望的事情一切顺利,要更努力才能更幸运,干巴爹~

image.png

今日题目

leecode66题:leecode66.加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

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

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

示例 1:

输入:digits = [1,2,3]

输出:[1,2,4]

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


示例 2:

输入:digits = [9, 9]

输出:[1, 0, 0]

解释:输入数组表示数字 99

题目分析

拿到这个题目我第一想法是把数组变成数字然后再加一再转回来,结果报错: 长度超限制,所以我就只能老实的遍历数组了。。。

image.png

首先最高位放在数组的首位,也就是+1的操作从数组的结尾开始,遇到10向上进位, 所以从数组的末尾向前遍历

要注意99这样的情况,需要向数组首位增加一个1

思路:

遇9则变成0,如果有一位不是9,则+1直接返回(如 49 -》50, 34 -》35)

如果都是9,就在数组首位插入1(如 99 -》 100)

var plusOne = function(digits) {
  for (let i = digits.length - 1; i >=0; i--) {
    if (digits[i] === 9) {
      digits[i] = 0
    } else {
      digits[i]++
      return digits
    }
  }
  digits.unshift(1)
  return digits
}

总结

最近刷题,从一开始毫无思路到慢慢的敢尝试写写,开始慢慢入门了,希望培养刷题的习惯,培养算法的思维。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情