题目:
Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
解法:题目用数组表示非负十进制数的每一位,然后对这个数字加一,和字符串加法一样,用c存储低一位的进位,从后向前遍历。
需要注意两个方面,一个是最高位有进位,那么需要new一个新数组,把进位和更新后的原始数组都放进去。
另一个是处理高位无效的0
public class No67_PlusOne {
public static void main(String[] args){
int[] result = plusOne(new int[]{});
for(int i:result)
System.out.print(i);
}
public static int[] plusOne(int[] digits) {
if(digits.length == 0) return digits;
int c = 1;
for(int i=digits.length-1;i>=0;i--){
digits[i] += c;
c = digits[i] / 10;
digits[i] = digits[i] % 10;
}
if(c == 0) {
int k = 0;
while(k<digits.length-1 && digits[k]==0) k++;
int[] r = new int[digits.length-k];
int j = 0;
for(;k<digits.length;k++)
r[j++] = digits[k];
return r;
}
int[] ret = new int[digits.length+1];
ret[0] = c;
for(int i=1;i<ret.length;i++)
ret[i] = digits[i-1];
return ret;
}
}