Leetcode 05 ——加一(Java)

103 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情


前言

Algorithms + Data Structures = Programs.

                                                      ————Pascal之父 Nicklaus Wirth

算法 + 数据结构 = 程序

坚持刷算法题,变得更强!


题目及解析

image.png

 解析

看看题目是不是脑子一热觉得这题so easy。不就是加1嘛,我只要把数组最后一个数加一然后返回整个数组不就行了。


此言差矣,那你个位数如果是9嘞?那你是不是十位数还要加1?那如果你十位数还是9,百位数是不是又要加1?层层套娃给你弄晕了。


其实我们要解决此题很简单。

思路:我们分为两种情况,一种是普通数,这种数既可以没有进1,也可以进1。举个栗子:普通数可以是123然后加1,变成123;也可以是169,加一变成167,只要加一后长度不变,你原来是三位数加一还是三位数就行。我们认为是普通数。

另一种特殊情况就可以直接举例子:比如999,加一之后是不是变成1000,原来是三位数,加一之后变成了四位数,这时候我们是不是就要让他的数组长度加1了。注意数组长度加1哦。


然后在普通数里面我们再分两种情况:

①尾数或除头数以外有9的情况,咱们可以直接此位赋值为0,然后让 一个变量 i 继续循环,前一位如果不为9,加1即可。

②没有9就直接加1


解题代码

class Solution {
    public int[] plusOne(int[] digits) {
        int n = digits.length;
        for(int i = n-1;i>=0;i--){
            if(digits[i]==9){
                digits[i] = 0;
            } else{
                digits[i] += 1;
                return digits;
            }
        }
            digits = new int[n+1];
            digits[0] =1;
           return digits;

    }
}