1. 程式人生 > >【Leetcode長征系列】Plus One

【Leetcode長征系列】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.

思路:

從最後一位開始讀,每位加一檢視是否有超位。超位進位,最後如果沒有位可進了在vetor首位插入新元素。

程式碼:

class Solution {
public:
    vector<int> plusOne(vector<int> &digits) {
        int carry = 0;
        vector<int> res;
        int  i;

        for ( i = digits.size()-1; i>=0; i-- ){
            digits[i] = 1+carry+digits[i];
            carry = digits[i]/10;
            digits[i] %= 10;
        }
        if(carry) digits.insert(digits.begin(),1);
        return res;
    }
};

這個的問題是1. return的res最終都沒有值,因為過程中沒有給它賦值。2. 邏輯錯誤,是最後一位加一併不是每一位都加一!

更改程式碼:

class Solution {
public:
    vector<int> plusOne(vector<int> &digits) {
        int  i;
        for ( i = digits.size()-1; i>=0; --i ){
            if(digits[i]==9)    digits[i] = 0;
            else {
                ++digits[i];
                return digits;
            }
        }
        if(i<0) digits.insert(digits.begin(),1);
        return digits;
    }
};