第十二个算法-加1

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。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分钟。无语了。虽然包括写这个文章。加油。之后中午练习,不要占用工做时间了。太耽误时间了。
相关文章
相关标签/搜索