js - leetcode-加一

111 阅读1分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

前言

  • 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来,由此可见,leetcode的题还是有分量的。今天我们就来会会它们

题目地址

加一

题目介绍

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

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

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

示例 1:

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

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

1 <= digits.length <= 100
0 <= digits[i] <= 9

数学

思路

  • 数字加法应该从最后一个开始,所以需要倒循环数组digits
  • 如果当前循环值等于9,那么就把当前值设为0,进位为1
  • 如果当前循环值不等于9,那么当前值执行+1操作,进位设为0
  • 循环完成,如果进位依旧是1,那么就证明它属于9999999,99999类似的数了
  • 那么就需要通过数组的unshift方法,给数组顶部添加数字1
  • 返回数组即可

解法

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
    // 创建临时变量carry,表示进位 1表示进位, 0 表示不进位, 默认表示进位
    let carry = 1
    // 倒循环数组
    for (let i = digits.length - 1; i >= 0; i--) {
        // 如果当前项等于9,并且有进位,
        // 那么就把当前值设为0,同时进位设为1
        if (digits[i] === 9) {
            if (carry === 1) {
                digits[i] = 0
                carry = 1
            }

        } else {
            // 否则
                // 当前项直接加等于carry
                // 同时进位carry设为0
            digits[i]+=carry
            carry = 0
        }
    }
    if (carry === 1) {
        digits.unshift(1)
    }
    return digits
};

写在最后

  • 希望你能收获满满