0
点赞
收藏
分享

微信扫一扫

【LeetCode刷题】66 加一 -java

MaxWen 2022-03-19 阅读 70

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

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

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

 分三种情况,分别讨论。

1、首先就是,如果数组最后一位是小于9的,则只需将数组最后一位加1就可以直接输出了。

2、其次就是,当数组的最后一位是9时,当加1之后就会变成10,所以我们可以对整个遍历,从后往前遍历,只要加1等于10,则将该位置赋值为0,并将前一位加1,一直循环到第0位,如果第0位不等于10,则直接输出当前数组,否则就是第三种情况。

3、最后判断如果数组下标0位置的值是10,则我们需要对数组进行扩容,创建一个新数组,让数组的下标0的值为1,下标1的值为0,其它下标的值则和原先的数组值一摸一样,然后将新数组输出。

class Solution {
    public int[] plusOne(int[] digits) {
        int n = digits.length;
        digits[n-1] = digits[n-1] + 1;		//直接将最后一位加1
        if(digits[n-1]<10)							//最后一位不需要进位,就可以直接输出
            return digits;
      //如果需要进位,则从后往前遍历
        for(int i = n-1;i>=1;i--){	//第一位单独判断
            if(digits[i] == 10){		//遇到要进位的,就先置0,前一位加1
                digits[i] = 0;
                digits[i-1] = digits[i-1] + 1;
            }
        }
        if(digits[0] == 10){		//第一位如果要进位,需要重新new一个容量多1的数组存放
            int[] newdigits = new int[n+1];
            newdigits[0] = 1;
          	newdigits[1] = 0;
            for(int i = n;i >= 2;i--){		//将原数组的值赋给新数组,除了原第一位
                newdigits[i] = digits[i-1];
            }
            return newdigits;
        }
        return digits;
    }
}

其余已整理的题目链接:

【LeetCode刷题】 题目汇总 -java_Eric加油学!的博客-CSDN博客

举报

相关推荐

0 条评论