###### tags: `leetcode` `easy` `array` `math` # [66. Plus One](https://leetcode.com/problems/plus-one/) ## Description You are given a large integer represented as an integer array `digits`, where each `digits[i]` is the $i^{th}$ 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. ## 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. ## Code ```c= /** * Note: The returned array must be malloced, assume caller calls free(). */ int* plusOne(int* digits, int digitsSize, int* returnSize) { int carry = 1; // Sequentially checking each digit is carry or not for (int i = digitsSize - 1; i >= 0; i--) { digits[i] += carry; if (digits[i] == 10) { digits[i] = 0; carry = 1; continue; } carry = 0; break; } // Using carry bit to assign correst return size *returnSize = digitsSize + carry; int* ans = malloc(*returnSize * sizeof(int)); // Assign number from digits with shifting of digits by carry for (int i = *returnSize - 1; i > 0; i--) ans[i] = digits[i - carry]; ans[0] = carry ? 1 : digits[0]; return ans; } ``` ## Complexity |Space |Time | |- |- | |$O(n)$ |$O(n)$| ## Result - Runtime: 2 ms, 76.18% - Memory Usage: 5.8 MB, 30.18%