0
点赞
收藏
分享

微信扫一扫

力扣刷题日记——L66.加一

前言:

从今天开始打卡力扣,每天一道力扣题,然后将解题思路分享出来,纯原创。

题目描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 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

    题目解析

    这是一道简单题,简单来说就是把一个整数放在一个数组里面,然后对这个数进行加一操作。考察了我们对于加法进位的理解,非常简单,我们分情况进行讨论:

  1. 对于末尾不是 9 的数字,我们只需要把数组末尾的值加 1,再放回末尾即可。
  2. 对于末尾是 9 的数字,我们需要加完之后,再对末尾的前一位加1。

所以我们可以先写好以下代码:

    public static int[] plusOne(int[] digits) {
        for(int i= digits.length-1;i>=0;i--){
            int number = digits[i];
            if(number<9){
                digits[i]=number+1;
                break;
            }else{
                digits[i]=0;
            }
        }
        return digits;
    }

我们从数组的最后一位往前遍历,如果遇到 9 ,就将其设置为 0,如果不是 9 则加 1 推出循环。很好理解,如果不是 9,加完 1 之后就不需要再处理前面的数了,比如 123,对 3 进行加 1 之后,就不用对 2,进行处理了。如果遇到了 9 ,则加 1 之后是 10,留下 0,继续给前面的数加 1,例如 129,对 9 加 1 之后继续循环到 2,对 2 加 1 之后退出循环,最后结果是 130。 到这里是不是结束了呢?显然不是,我们还没有说最后一种情况,就是数组里面都是 9 怎么办?那么我们就可以在上面的基础上加上部分代码来应对这种情况了。

    public static int[] plusOne(int[] digits) {
        for(int i= digits.length-1;i>=0;i--){
            int number = digits[i];
            if(number<9){
                digits[i]=number+1;
                break;
            }else{
                digits[i]=0;
            }
            if (i==0){
                digits = new int[digits.length+1];
                digits[0] = 1;
            }
        }
        return digits;
    }

这段代码的意思是什么呢?如果当前的索引 i 为 0,则说明这个数组里的元素都是数字 9 ,被加之后变成了 0 ,为什么这么推断? 因为如果不是 9,那么肯定被加 1 然后 break了,根本执行不到这里,能执行到这里的都是 9 被加 1 变成了 0 ,由于此时是第一个元素,说明从末尾到第一个元素都是 9,有可能是 9、99、999等等,此时只需要把这个数组的长度+1,然后将索引为 0 的位置设置为 1 即可。

最后结果

屏幕截图 2024-03-11 225800.png

举报

相关推荐

0 条评论