Array     C++     Easy     Math    

Problem Statement:

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

Solution:

Logic is to start from right end towards left and till you see nine ,change to zero, Now if stopping point is -1 then this means input was of the form 999..9 so answer has to be 1000..0 and if stopping point is somewhere in the middle then we can just increment it like ...2999 becomes ...3000.

 
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) 
    {
        int i = digits.size() - 1;
        while (i>=0 && digits[i]==9) 
        {
            digits[i]=0; 
            i--;
        }
        if (i==-1) digits.insert(digits.begin(), 1);
        else digits[i]++;
        return digits;
    }
};
 

We can also do it in the form of a standard addition. This method will also work if instead of 1, we need to add some other number. This uses the standard “Carry over” method of addition.

 
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int carry = 1;
        for (int i=digits.size()-1; i>=0; --i)
        {
            int temp = (carry+digits[i]);
            digits[i] = temp%10;
            carry = temp/10;
        }
        if (carry>0) digits.insert(digits.begin(), carry);
        return digits;
    }
};