第十二个算法-加1

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

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

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

示例 1:

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

示例 2:

输入: [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分钟。无语了。虽然包括写这个文章。加油。以后中午练习,不要占用工作时间了。太耽误时间了。

猜你喜欢

转载自www.cnblogs.com/liutian1912/p/9354481.html