要求:
给一个非空的数字类型的数组,这个数组代表一个非负整数,计算这个整数加一,并返回这个整数代表的数组
例如:输入 [1,2,3]
输出[1,2,4]
第一次尝试代码,想用java自带的一些数据结构和算法,但是结果很low:
public int[] plusOne(int[] digits) {
List<Integer> list= new ArrayList();
int length=digits.length;
int current=digits[length-1]+1;
int temp=0;
if (current<10) {
list.add(current);
}else {
temp=1;
list.add(0);
}
for(int i=length-2;i>=0;i--){
if(temp==1){
int c=digits[i]+1;
if(c<10){
temp=0;
list.add(c);
}else {
list.add(0);
}
}else {
list.add(digits[i]);
}
}
if(temp==1){
list.add(1);
}
Collections.reverse(list);
return list.stream().mapToInt(Integer::valueOf).toArray();
}
结果如下:
第二次尝试,考虑尽量不要再开辟新的空间。代码如下:
public int[] plusOne(int[] digits) {
int length=digits.length;
int temp=1;
for(int i=length-1;i>=0;i--){
digits[i]=digits[i]+temp;
if(digits[i]==10){
digits[i]=0;
}else {
temp=0;
break;
}
}
if(temp==1){
digits=new int[length+1];
digits[0]=1;
for(int i=1;i<length+1;i++){
digits[i]=0;
}
}
return digits;
}
结果当然很好: