数组加一问题
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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;
}