66. 加一

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

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

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

示例 1:

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

示例 2:

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


思路:
原本想先转成数字然后加1之后再转回数组,但是这样有问题,就是如果数字超出数字的范围,就会返回类型的最大值,但是本题对数字长度没有限制,所以,理论上,只要有上限的类型都不行,所以换了思路,就是从最后一位起,加一进位的方式。
class Solution {
    public int[] plusOne(int[] digits) {
        int index = digits.length-1;
        int add=add1(digits[index]);//add的作用就是判断是进位还是加一
        boolean extend=false;//如果全是0,说明要扩展数组,则为true
        while(true){
            if(add==1){
                digits[index]= digits[index]+add;
                break;
            }else{
                digits[index]=0;//进位,置0
                index--;
            }     
            if(index<=0&&digits[0]==0){//经过计算后为0,说明是进位
                extend=true;
                break;
            }
            add=add1(digits[index]);//下一位判断是否进位
        }
        if(extend){
            int[] ndts=new int[digits.length+1];
            ndts[0]=1;
            for(int i=1;i<digits.length+1;i++){
                ndts[i]=0;
            }
            return ndts;
        }else{
            return digits;
        }
       
    }   
    public int add1(int digit){
        if(digit==9){
            return 0;
        }else{
            return 1;
        }
    }
}
    

如果当前是9,当前置为0,下标前移,判断index--这一位,如果遇到不是9 的,结束循环。
当全是9,需要进位的时候,创建一个新数组;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值