Plus One

Updated on 02 July, 2025
Plus One header image

Problem Statement

In this task, you are presented with a number expressed as an array, where each element in the array digits[i] signifies the i-th digit of a large integer. The digit order in the array proceeds from most significant (leftmost) to least significant (rightmost). It's important to notice that the number represented by the array does not start with a zero unless it is zero itself.

Your challenge is to increment this integer by one and produce the updated number as a returned array of digits. The key difficulty lies in handling the carry that results from adding one to a digit especially when this results in a change in the number of digits (e.g., from 999 to 1000).

Examples

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 <= 100
  • 0 <= digits[i] <= 9
  • digits does not contain any leading 0's.

Approach and Intuition

Our goal is to simulate the process of addition as done typically on paper, starting from the least significant digit (rightmost) and working our way to the most significant digit (leftmost), while taking care of carries.

  1. Start iterating the digits array from the last element (rightmost digit) since we are incrementing the number by one.

    • If the rightmost digit is less than 9, simply increment this digit and return the array.
    • If the digit is 9, this will result in a carry that needs to be propagated to the next significant digit (to the left).
  2. Continue with the previous step's iterative process toward the left:

    • If the current digit is less than 9, increment it and break the loop. The process is then complete.
    • If the current digit is 9, set this digit to 0 and continue to the next significant digit to manage the carry.
  3. Edge Case Resolution:

    • If the leftmost digit also results in a carry (like turning from 9 to 10), this means all digits in the array were 9.
    • Hence, after the loop, the array will comprise all zeros. Therefore, prepend a 1 at the beginning to accommodate the newest carryover (indicative of the fact that a power of 10 has been reached).

This approach operates directly on the input array, ensuring that both space and time efficiency are maintained, fitting comfortably within the given constraints.

Solutions

  • C++
  • Java
  • C
  • JavaScript
  • Python
cpp
class Solution {
public:
    vector<int> incrementVector(vector<int>& numbers) {
        int length = numbers.size();
        for (int index = length - 1; index >= 0; --index) {
            if (numbers[index] == 9) {
                numbers[index] = 0;
            } else {
                numbers[index]++;
                return numbers;
            }
        }
        numbers.insert(numbers.begin(), 1);
        return numbers;
    }
};

The given C++ solution addresses the problem of incrementing a number represented as an array of its digits. For example, converting the number [1, 2, 3] into [1, 2, 4]. Here's how the code achieves this:

  • Start by analyzing the array from the least significant digit (rightmost element).
  • Iterate through the digits backwards:
    • If a digit is 9, set it to 0 and move to the next most significant digit.
    • If a digit is not 9, simply increment it by 1 and immediately return the result since no further changes are needed.
  • If all digits in the array are 9, the entire array would be set to zeroes. As a final step, insert 1 at the beginning of the array, effectively handling a carry-over (for example, changing [9,9] to [1,0,0]).
  • Return the modified array as the final result.

This solution ensures efficient handling of digit incrementation, particularly when handling carry-overs in large numbers efficiently.

java
class Solution {
    public int[] incrementDigits(int[] numArray) {
        int length = numArray.length;
    
        // Iterate from the last element to the first
        for (int i = length - 1; i >= 0; i--) {
            // If element is 9, convert it to 0
            if (numArray[i] == 9) {
                numArray[i] = 0;
            } else {
                // If not 9, increment and return
                numArray[i]++;
                return numArray;
            }
        }
    
        // If all elements were 9, create a new array
        numArray = new int[length + 1];
        numArray[0] = 1; // Set first element to 1
        return numArray;
    }
}

The given Java solution addresses the problem of incrementing an integer represented as an array of digits. Here is the breakdown of how this method, incrementDigits, works:

  • Initialize length to the size of the input array numArray.
  • Iterate from the last element to the first. This involves checking each digit:
    • Check if the current element is 9. If it is, set the element to 0.
    • If the current element is not 9, increment the digit by 1 and return the modified numArray because no further processing is needed.
  • If you exit the for-loop without returning, this implies that all digits in the array were 9. As a result, they've all been turned to 0 and you need to accommodate the carryover. Create a new array numArray, now one element larger than the original.
    • Set the first element of this new array to 1, reflecting the carryover from an increment of a number like 999 to 1000.
  • Finally, return the updated array, which now represents the incremented number.

This code effectively handles an increment operation on a very large number represented as a digit array, where it might not be feasible to convert the entire number to an integer for manipulation directly due to size constraints or overflow issues.

c
int* incrementDigits(int* numbers, int length, int* newSize) {
    for (int i = length - 1; i >= 0; --i) {
        if (numbers[i] == 9)
            numbers[i] = 0;
        else {
            numbers[i]++;
            *newSize = length;
            return numbers;
        }
    }
    numbers = realloc(numbers, (length + 1) * sizeof(int));
    numbers[0] = 1;
    for (int j = 1; j < length + 1; ++j) numbers[j] = 0;
    *newSize = length + 1;
    return numbers;
}

In solving the "Plus One" problem using C, the provided function incrementDigits adjusts an array of integers where each element represents a single digit of a decimal number. The task is to increment this number by one and handle cases where the increment causes a carry.

  • The function accepts three parameters:

    • int* numbers: Pointer to an array of integers, each element is a digit.
    • int length: The number of integers in the array.
    • int* newSize: Pointer to an integer where the resultant size of the array is stored.
  • The function works as follows:

    1. It iterates from end to start over the digits in the numbers array.
    2. If a digit is 9, it becomes 0 due to a carry over.
    3. If a digit is not 9, increment it by 1 and exit after setting *newSize to length.
    4. If the loop completes without finding a digit less than 9, extend the array size as the number resembles '999...9'. Utilize realloc to handle memory appropriately. The new number will be like '1000...0' having length + 1 digits with the first digit as '1' and the others as ‘0’.
    5. Assign the new size value (*newSize), which is length + 1 if a carry over flows to a new digit.

This function directly modifies the supplied array to hold the new number and also updates its size if a carry addition extends the number's size.

js
var incrementDigits = function(array) {
    let length = array.length;
    for (let index = length - 1; index >= 0; --index) {
        if (array[index] == 9) {
            array[index] = 0;
        } else {
            array[index]++;
            return array;
        }
    }
    array.unshift(1);
    return array;
};

The problem "Plus One" requires writing a function that takes an array of digits representing a non-negative integer, and returns an array with the integer value incremented by one. The function is implemented in JavaScript.

The solution involves creating a function incrementDigits where:

  1. Determine the length of the input array.
  2. Loop backwards through the array, starting from the last digit.
  3. If the digit at the current index is 9, change it to 0.
  4. If the digit at the current index is less than 9, increment it by 1 and immediately return the array.
  5. If all digits in the array were 9 (converted to 0), prepend a 1 to the array before returning.

This solution effectively handles scenarios where carrying over is needed (when the numbers wrap from 9 to 0), and also accommodates numbers that increase in length due to increment, e.g., from 999 to 1000.

python
class Solution:
    def increment(self, nums: List[int]) -> List[int]:
        length = len(nums)
    
        for pos in range(length):
            position = length - 1 - pos
    
            if nums[position] == 9:
                nums[position] = 0
            else:
                nums[position] += 1
                return nums
    
        return [1] + nums

The provided Python solution aims to solve the "Plus One" problem, typically used to simulate the process of adding one to a number represented as a list of its digits. Follow these explanations of how the implementation works:

  • Define an increment method that accepts a list of integers. Each integer in the list represents a digit in a number.
  • Calculate the length of the list to determine iterations needed from the last digit (least significant) to the first.
  • Iterate over the list in reverse order. For each digit, check if it is '9'.
    • If the digit at the current position is '9', set this digit to '0' due to digit overflow (like carrying in addition).
    • If it is not '9', simply add one to this digit and return the list, as no further changes are needed.
  • If the loop completes without returning (all digits were '9'), prepend '1' to the list. This handles cases when increment results in an additional digit (e.g., 999 becomes 1000).

This approach is efficient for scenarios with large numbers represented in array formats, handling digit carry effectively for numeric increments.

Comments

No comments yet.