1. 程式人生 > >leetcode66題 題解 翻譯 C語言版 Python版

leetcode66題 題解 翻譯 C語言版 Python版

66. Plus One

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

66.加一

給定一個由數字陣列表示的非負整數,給它加上一。

數字儲存方式是表頭為高位。

思路:對於c這樣需要分配好陣列大小的語言來說,如果整個數加1後最高位沒有進位,那麼可以分配與原陣列長度一致的新陣列,但如果最高位有進位時,陣列長度就要加1。最高位有進位當且僅當當前的所有位都為9時,所以最開始可以遍歷一遍陣列,只要有一個不為9,那麼就和原陣列長度一致。進位操作很簡單,從陣列最後一位開始遍歷,大於9就進位,小於9不進位。

如果是python等運算元組較方便的語言,可以最後時再在陣列前面插入一個元素。注意用python時沒有要求分配新的list,只需要修改原來傳入的list即可,但最後要返回

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
    int carry = 1;
    for (int i = 0; i < digitsSize; i++){
        if (digits[i] != 9){
            carry = 0;
            break;
        }
    }
    int* plusone = (int*)malloc(sizeof(int)*(digitsSize+carry));
    if (carry){
        plusone[0] = 1;
    }
    int p = 1;
    for (int i = digitsSize - 1; i >= 0; i--){
        plusone[i+carry] = digits[i] + p;
        if (plusone[i+carry] > 9){
            plusone[i+carry] -= 10;
            p = 1;
        }
        else{
            p = 0;
        }
    }
    *returnSize = digitsSize+carry;
    return plusone;
}


class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        carry = 1
        for i in range(0, len(digits))[::-1]:
            digits[i] += carry
            if digits[i] > 9:
                digits[i] -= 10
                carry = 1
            else:
                carry = 0
        if carry > 0:
            digits.insert(0, 1)
        return digits