Description
You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0's.
Increment the large integer by one and return the resulting array of digits.
Example 1:
Input: digits = [1,2,3] Output: [1,2,4] Explanation: The array represents the integer 123. Incrementing by one gives 123 + 1 = 124. Thus, the result should be [1,2,4].
Example 2:
Input: digits = [4,3,2,1] Output: [4,3,2,2] Explanation: The array represents the integer 4321. Incrementing by one gives 4321 + 1 = 4322. Thus, the result should be [4,3,2,2].
Example 3:
Input: digits = [9] Output: [1,0] Explanation: The array represents the integer 9. Incrementing by one gives 9 + 1 = 10. Thus, the result should be [1,0].
Constraints:
1 <= digits.length <= 1000 <= digits[i] <= 9digitsdoes not contain any leading0's.
Solutions
This function adds one to a number represented as a digit array by explicitly tracking a carry flag, which starts at 1 (the "plus one" itself). Looping from the last digit backward, if the current digit is less than 9 it gets incremented, carry is set to 0, and the loop breaks early since nothing further needs to change; if the digit is a 9, it becomes 0 and the carry keeps propagating to the next digit on the left. After the loop, if carry is still 1, every digit was a nine (like [9, 9, 9]), so unshift(1) prepends a leading 1 to form [1, 0, 0, 0]. The modified array is returned at the end.
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
const n = digits.length;
let carry = 1;
for (let i = n - 1; i >= 0; i--) {
if (digits[i] < 9) {
digits[i]++;
carry = 0;
break;
}
digits[i] = 0;
}
if (carry === 1) {
digits.unshift(1);
}
return digits;
};