LeetCode 66. 加一

@LeetCode 66. 加一

LeetCode 66. 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

解题思路

非负整数加一的题其实和长整数的加法类似,其难度在于处理进位。所以当然要有进位标志了,将数组从后往前遍历,每次都给数组当前位的元素加a和count,a只有在以第一循环时才为1,其他都是0,当count为零即没有进位或数组已遍历到最高位时停止循环。循环结束后若i=-1说明此数最高位有进位。需要重新分配一个比原数组长度加一的数组用于存放运算结果。
做LeetCode数组的题时需要小心谨慎数组下标越界异常。笔者的多数错误都出自此。

代码实现加一

Java代码实现

class Solution {
    public int[] plusOne(int[] digits) {
        int carry=0;//保存进位
        int a=1;//加数
        final int b=digits.length+1;//原数组长度加一作为最高位有进位时新数组的长度
        int i=digits.length-1;//数组最后一个元素下标
        do{
            if(digits[i]+carry+a==10){//数组的每一个加进位加a判断是否有进位
                digits[i]=0;//有进位则当前为置零
                carry=1;//进位指标置1;
                i--;}//有进位则要将进位加至高一位
            else {digits[i]+=1;return digits;}//若进位,将当前为加1返回即可
            a=0; //只有最后一位需要加1,其余不需要,故置零 
        }while(carry==1&&i!=-1);//当无进位或数组元素已遍历完时跳出循环
        if (i==-1){//i等于-1说明跳出循环的条件是数组遍历完了,也就是这个数最高位有进位,分配新数组存答案
            int array[]=new int[b];
            array[0]=1;
            for(int j=1;j<b;j++)
            {array[j]=0;
             return array;}
        }
        return digits;
            
    }
}

提交执行用时战胜97%的java提交记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值