题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
如:
输入[ 1,2,3 ]
输出[ 1,2,4 ]
错误代码:
public static int[] plusOne(int[] digits) {
int num=0;
for(int i=0;i<digits.length;i++){
if(i==digits.length-1){
digits[i]++;
}
}
}
return digits;
}
错误原因:没有考虑到当数字为9 的时候,加一需要进一位而不是将数字变为10。
正确代码:
整个结果分为两种情况:
- 除 99 之外的数字加一;
- 数字 99。
class Solution {
public int[] plusOne(int[] digits) {
int num=0;
for(int i=digits.length-1;i>=0;i--){
digits[i]++;
digits[i]%=10;
if(digits[i]!=0){
return digits;
}
}
digits=new int[digits.length+1];
digits[0]=1;
return digits;
}
}
核心算法:考虑到其十进制的需求,进位。如遇到99,999,还需要加一位,变为100,1000。
要点
- 从后往前遍历,依照计算加一的数学思维。
- 由于要判断是否是10,所以,将被加的数字进行对十取余,
如果取余结果为0,则将数组的长度加一,在digits[ 0 ] 的位置上放入1;
如果取余结果不为0,则证明其数并没有超过10,无需进位