力扣网-66加一(Java实现)

本文详细解析了一种算法题目,即给定一个由整数组成的非空数组表示的非负整数,在该数的基础上加一。文章通过示例说明了算法的三种情况,并提供了详细的代码实现。

题目描述:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1:
在这里插入图片描述
示例2:
在这里插入图片描述
思路解析:
分三种情况,分别讨论。
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;
        //将数组最后一位加1
        digits[n - 1] = digits[n - 1] + 1;
        //只要最后一位小于10,则直接输出当前数组
        if(digits[n - 1] < 10){
            return digits;
        }
        //如果最后一位值为10,则对整个数组进行遍历
        for(int i = n - 1; i >= 1; i--){
            if(digits[i] == 10){	//只要当前下标值等于10,就让当前下标值为0,并让前一个下标值加1
                digits[i] = 0;
                digits[i - 1] = digits[i - 1] + 1;	//让前一个下标值加1
            }
        }
        //如果下标0的值为10,则需要创建一个新数组,容量比当前多1
        if(digits[0] == 10){
            int[] newDigits = new int[n + 1];
            newDigits[0] = 1;	//赋值下标0的值为1
            newDigits[1] = 0;	//赋值下标1的值为0
            for(int i = n; i >= 2; i--){	//进行循环,将之前的数组的值赋值给新数组,除了下标0和下标1
                newDigits[i] = digits[i - 1];
            }
            return newDigits;
        }
        return digits;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值