1. 程式人生 > >加一(LintCode)

加一(LintCode)

題目來源:LintCode

原題地址: http://www.lintcode.com/zh-cn/problem/plus-one/

題目:

給定一個非負數,表示一個數字陣列,在該數的基礎上+1,返回一個新的陣列。

該數字按照大小進行排列,最大的數在列表的最前面。

您在真實的面試中是否遇到過這個題? Yes 樣例

給定[1,2,3]表示 123, 返回[1,2,4].

給定[9,9,9]表示 999, 返回[1,0,0,0].


難度級別:
容易
思路分析:
本題我採用的策略是,首先直接在原陣列上更改,並更新進位快取區,全部更新之後,進位快取區不為零,則需要開闢一塊新的記憶體空間來儲存新的陣列;如果進位快取區為零,則直接返回更新之後的陣列就可以了。
實現程式碼:
class Solution
{
public:
    /**
    * @param digits a number represented as an array of digits
    * @return the result
    */
    vector<int> plusOne(vector<int>& digits)
    {
        int c = 1;
        
        for (int i = digits.size() - 1; i >= 0; i--)
        {
            digits[i] = digits[i] + c;
            c = digits[i]/10;
            digits[i] %= 10;
        }
        
        if (c > 0)
        {
            vector<int> temp(digits.size()+1, 0);
            temp[0] = c;
            for (int i = 1; i < temp.size(); i++)
            {
                temp[i] = digits[i - 1];
            }
            return temp;
        } else
        {
            return digits;
        }
    }
};



程式碼說明:
變數c 表示進位快取區,用來儲存進位的。