Plus One

Introduction

In this blog, we will discuss the problem of incrementing a large integer represented as an integer array by one. We will explore the approach to solving this problem using a simple algorithm.

Problem Statement

Given an integer array digits representing a large integer, 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. The task is to increment the large integer by one and return the resulting array of digits.

Data Structure Used

We will be using a simple array data structure to represent the large integer.

Algorithmic Approach

We will traverse the array from the rightmost end and increment the digit by one until we encounter a digit that is less than 9. If we encounter a digit that is 9, then we set it to 0 and continue the traversal until we reach a digit that is less than 9. If we reach the leftmost digit and it is 9, then we create a new array with size n+1, where n is the size of the original array, set the first element to 1, and return this new array.

vector<int> plusOne(vector<int>& digits){
        int n = digits.size();
        for (int i = n-1; i >= 0; i--) {
            if (digits[i] < 9) {
                digits[i]++;
                return digits;
            } else {
                digits[i] = 0;
            }
        }
        vector<int> new_digits(n+1, 0);
        new_digits[0] = 1;
        return new_digits;
    }

Time Complexity

The time complexity of this algorithm is O(n), where n is the size of the array.

Space Complexity

The space complexity of this algorithm is O(1) for the worst case when we need to create a new array of size n+1.

Conclusion

In this blog, we discussed the problem of incrementing a large integer represented as an integer array by one. We explored the approach to solve this problem using a simple algorithm. We also analyzed the time and space complexity of the algorithm.

Using Vectors