66. Plus One

1.問題

  • 給予一個list, 並在最末的數值+ 1, 問最終的list

2.想法

  • 提問: 確定是在第一個元素還是最末個元素+ 1

  • function header, parameter

  • test input

  • 說明想法

    • 因為在第一個元素+ 1會比較簡單, 因此計算前先對vector reverse以方便計算

    • 計算時須注意新的值是(carry + 自己) % 10, 並且更新carry

    • 當結束計算, carry不為零時, push到list中

    • reverse回來

  • 測試計算複雜度

3.程式碼

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        //vector<int> res;
        reverse(digits.begin(), digits.end());
        int ret = 0, curr = 0; 
        for (int i = 0 ; i < digits.size(); i++){
            if( i == 0){
                ret = (digits[0] + 1) / 10;
                digits[0] = ((digits[0] + 1) < 10) ? digits[0] + 1 : (digits[0] + 1) % 10;
            }else{
                int t = digits[i];
                digits[i] = ((digits[i] + ret) < 10) ? digits[i] + ret : (digits[i] + ret) % 10;
                ret = (ret + t) / 10;
            }
        }
        if(ret != 0){
            digits.push_back(ret);
        }
        reverse(digits.begin(), digits.end());
        return digits;
    }
};

Last updated