给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。git
最高位数字存放在数组的首位, 数组中每一个元素只存储一个数字。数组
你能够假设除了整数 0 以外,这个整数不会以零开头。优化
示例 1:spa
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:it
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
思路:
1,加一个判断值,是否是须要建立新数组,而且加1.
2,倒序循环判断,若是当前值+1等于10,当前赋值为0,前进加1
代码:
public int[] plusOne(int[] digits) {
boolean bool = false;
for (int i = digits.length-1; i >=0 ; i--) {
if(digits[i] +1>9){
bool = true;
digits[i] =0;
}else{
digits[i] +=1;
bool = false;
break;
}
}
if(bool){
int[] digite1 = new int[digits.length+1];
digite1[0]=1;
System.arraycopy(digits,0,digite1,1,digits.length);
return digite1;
}
return digits;
}
别人好的代码:
public int[] plusOne(int[] digits) { boolean add = true; int len = digits.length; for (int i = len - 1; i > -1; i--) { if (digits[i] == 9 ) { digits[i] = 0; add =true; } else { digits[i] += 1; add = false; return digits; } } if(add){ int[] newArray = new int[len + 1]; newArray[0] = 1; return newArray; } return digits;}原本计划是在10分钟内完成全部的事情,由于初看很简单,没想到位数为值为9的状况打破了想法。看来别人的代码发现本身的缺陷很明显。根本没有优化,好比不须要加1判断,不须要最后copy数组等。耽误太多时间了。截止如今一个小的问题消耗了46分钟。无语了。虽然包括写这个文章。加油。之后中午练习,不要占用工做时间了。太耽误时间了。