数组加一

数组加一问题

问题来源

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

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

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

示例 1:

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

示例 2:

输入:digits = [4,3,2,9]
输出:[4,3,3,0]
解释:输入数组表示数字 4329。

示例 3:

输入:digits = [0]
输出:[1]

解题思路

题目的意思就是说,把一个数组的数拼接起来当成一个整数,然后这个整数加一,在把它以数组的形式输出。
分析会出现的情况:
数组的最后下标中元素的值不为9,也就意味着,最后下标元素的值加一就是结果
当数组后面元素连续都是9就需要一直往数组前一个元素加一,直到加到不为9的元素才停止,并且进位后的下标为0.
最特殊的情况,全部都是9,这就意味着原来数组长度不够,需要一个新数组并且是原来数组长度+1,初始化新数组后,在给新数组的第一个下标值赋1,后面元素都默认为0;
例如:
输入:[9,9,9,9]
输出:[1,0,0,0,0]
9999+1=10000

分析好后,代码实现为

public int[] plusOne(int[] digits) {
     for(int i=digits.length-1;i>=0;i--){//从数组尾部开始
         if(digits[i]!=9){//当前元素不为9
             digits[i]=digits[i]+1;//元素加一
             return digits;//返回数组
         }else{
             digits[i]=0;//为九时,把当前下标的元素赋0,下标i减一,在下一个元素中继续上面的循环,表示进位加1
         }
     }
     /*到达这一步,说明数组中的元素都是9,否则不会走到这一步,
     如果数组的元素都是9,我们只需要把数组的长度,增加1
     并且把数组的第一个元素置为1即可*/
     int[] temp = new int[digits.length+1];
     temp[0]=1;
     return temp;   
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值