给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 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,需要进位的时候,创建一个新数组;

726

被折叠的 条评论
为什么被折叠?



