题目链接:https://leetcode.com/problems/plus-one/
题目:
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.
解题思路:
- 保持一个进位变量。
- 数组的每一位都需要考虑该位数字是不是等于 9,以及进位是否为 1。
需要注意的是,当最高位有进位时,需要开辟新的数组,以满足增加的最高位,并把最高位赋值为 1,此时其它位都为 0。
注意:
为了使算法只遍历一次数组,不需要过早开辟长度大于 digits.length 的新数组。因为只有当原始数据的所有数位都为 9 时,最高位进位才会发生。
public class Solution {
public int[] plusOne(int[] digits) {
if(digits == null || digits.length == 0)
return digits;
int len = digits.length;
int[] res = new int[len];
int reminder = 0;
for(int i = len - 1; i >= 0; i --) {
if(i == len - 1) {
if(digits[i] == 9) {
reminder = 1;
res[i] = 0;
} else
res[i] = digits[i] + 1;
continue;
}
if(digits[i] < 9) {
res[i] = digits[i] + reminder;
reminder = 0;
}
else {
if(reminder == 1) {
res[i] = 0;
reminder = 1;
} else
res[i] = digits[i] + reminder;
}
}
if(reminder == 1) {
res = new int[len + 1];
res[0] = 1;
}
return res;
}
}
108 / 108 test cases passed.
Status: Accepted
Runtime: 304 ms