66. Plus One

題目:https://leetcode.com/problems/plus-one/

解法:直接解,加一後檢查每個位數是否進位,如果最後一位有進位的話,要增加一個位數。

Python3:

class Solution:
    def plusOne(self, digits: list[int]) -> list[int]:
        length = len(digits)
        ans = []
        carry = 1
        i = length - 1
        while i >= 0:
            num = digits[i] + carry
            carry = num // 10
            num %= 10
            ans.append(num)
            i -= 1
        if carry > 0:
            ans.append(carry)
        ans.reverse()
        return ans

if __name__ == '__main__':
    # digits = [1, 2, 3]
    digits = [9, 9, 9, 9]

    ans = Solution().plusOne(digits)
    print(ans)

C:

#include <stdio.h>
#include <stdlib.h>

int* plusOne(int* digits, int digitsSize, int* returnSize) {
    *returnSize = digitsSize;
    int *ans = (int *)malloc(sizeof(int) * digitsSize);
    int carry = 1;
    for (int i = digitsSize - 1; i >= 0; i--) {
        int num = digits[i] + carry;
        carry = num / 10;
        num %= 10;
        ans[i] = num;
    }
    if (carry > 0) {
        (*returnSize)++;
        ans = realloc(ans, sizeof(int) * (*returnSize));
        for (int i = digitsSize - 1; i >= 0; i--) {
            ans[i+1] = ans[i];
        }
        ans[0] = carry;
    }
    return ans;
}

int main() {
    int digits[] = {9, 9, 9, 9};
    int digitsSize = sizeof(digits) / sizeof(digits[0]);
    
    int returnSize;
    int *ans = plusOne(digits, digitsSize, &returnSize);
    for(int i = 0; i < returnSize; i++)
        printf("%d", ans[i]);
    printf("\n");
    return 0;
}
tags: leetcode array math