题目
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
我的解法(通解,不动脑筋)
public class Solution {
public int[] plusOne(int[] digits) {
ArrayList<Integer> list = new ArrayList<>();
int len = digits.length;
int mark = 1;
for(int i = 0; i < len; i ++){
list.add((digits[len - 1 - i] + mark)%10);
mark = (digits[len - 1 - i] + mark)/10;
}
if(mark == 1)
list.add(1);
int[] res = new int[list.size()];
for(int i = 0; i < res.length; i ++){
res[res.length - 1 - i] = list.get(i);
}
return res;
}
}
算法分析:不动脑筋的通解。有可能存在浪费,因为只加1,如果没产生进位了,高位就没有必要再加了。
答案解法
public class Solution {
// 加1操作,最后若进位则一定是100000....格式的
public int[] plusOne(int[] digits) {
int len = digits.length;
for(int i = len - 1; i >= 0; i--){
//判断是否需要对高位进行计算
if(digits[i] < 9){
//加1操作,不产生进位符,可以直接return
digits[i]++;
return digits;
}else
//加1操作,产生进位符,继续高位运算
digits[i] = 0;
}
int[] res = new int[len + 1];
res[0] = 1;
return res;
}
}