力扣 66 == 加一算法详解与代码实现

目录

关键步骤分析

代码实现及解释

复杂度分析

示例测试

总结


题目要求将一个用数组表示的非负整数加一,我们可以通过模拟数学中的加法运算来实现。关键在于正确处理进位,特别是当所有位都为9时的特殊情况。

关键步骤分析

  1. 从后向前遍历数组:加一操作从最低位(数组末尾)开始,逐步处理进位。

  2. 处理非9的情况:当前位不是9时,直接加一返回结果。

  3. 处理9的情况:当前位是9时,将其置为0,并继续处理前一位。

  4. 处理全为9的情况:若所有位都为9,最终在数组最前面添加1。

代码实现及解释

var plusOne = function (digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
    if (digits[i] !== 9) {
      digits[i]++; // 当前位加一
      return digits; // 直接返回
    } else {
      digits[i] = 0; // 进位,当前位置0
    }
  }
  // 处理全为9的情况,如[9,9,9]变为[1,0,0,0]
  return [1, ...digits];
};

复杂度分析

  • 时间复杂度:O(n),最多遍历数组一次。

  • 空间复杂度:O(1)(原地修改)或 O(n)(全为9时新建数组)。

示例测试

  1. 输入[9,9,9]

    • 处理过程:所有位变为0,最后添加1。

    • 输出[1,0,0,0]

  2. 输入[1,2,9]

    • 处理过程:末位9变0,中间位2加一。

    • 输出[1,3,0]

  3. 输入[1,2,3]

    • 处理过程:末位直接加一。

    • 输出[1,2,4]

总结

该方法避免了将数组转换为数字可能导致的溢出问题,直接逐位处理进位,高效且可靠。通过分情况讨论,确保所有可能的输入都能正确处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端 贾公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值