力扣刷题笔记 → 66. 加一

277 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

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

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

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

示例

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

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

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

提示

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

解题思路

要给一个整数加一,那不可避免的会涉及到进位的问题,对于个位数小于9的整数,可以直接加一返回结果。

个位数等于9的场景又分为两种情况:

  • 十位数及其以上有小于9的数字
  • 十位数及其以上均由数字9组成

对于第一种情况,我们只需要往前遍历,逐步进位到有小于9的数字,加一后直接返回结果即可。

第二种情况则需要新建一个数组,将首位数字改成1,其余位数默认值为0

代码实现

class Solution {
    public int[] plusOne(int[] digits) {
        int idx = digits.length - 1;
        // 先将个位数加一
        ++digits[idx];

        // 往前遍历,逐位进位
        while(idx > 0 && digits[idx] == 10){
            digits[idx] = 0;
            ++digits[--idx];
        }

        // 判断首位元素是否需要进位
        if(digits[0] == 10){
            // 新建一个原数组长度 +1 的数组,修改首位元素值后返回结果
            int[] ans = new int[digits.length + 1];
            ans[0] = 1;
            return ans;
        }

        return digits;
    }
}

复杂度分析

  • 时间复杂度:O(N)O(N)
  • 空间复杂度:O(1)O(1)

最后

文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!

如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!

题目出处: leetcode-cn.com/problems/pl…