summaryrefslogtreecommitdiff
path: root/top-interview-questions/easy/array/07_plus_one.cc
blob: 05c7b21c0f57e219a76cf08d2857d5f4f1b1f274 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int carry = 1;

        for (int i = digits.size()-1; (i >= 0) && (carry == 1); --i) {
            const int sum = digits[i] + carry;
            digits[i] = sum % 10;
            carry     = (sum >= 10) ? 1 : 0;
        }

        if (carry == 1) { // Overflow.
            digits.resize(digits.size() + 1);

            // Shift right.
            for (size_t i = digits.size()-1; i > 0; --i) {
                digits[i] = digits[i-1];
            }

            digits[0] = 1;
        }

        return digits;
    }
};