1. 程式人生 > >【Lintcode】加一

【Lintcode】加一

題目描述:
給定一個非負數,表示一個數字陣列,在該數的基礎上+1,返回一個新的陣列。
該數字按照大小進行排列,最大的數在列表的最前面。

樣例:
給定 [1,2,3] 表示 123, 返回 [1,2,4].
給定 [9,9,9] 表示 999, 返回 [1,0,0,0].

思路:看到這道題我們都能反應出來是加法的進位問題。OK,那麼很明顯就是從最後一位開始加。那麼就會分兩種情況,一種是9,一種是小於9。很顯然如果小於9,那麼直接+1return就完事;如果大於9,就將這位置0繼續加,如果上一位是小於9的,+1return,否則再次重複這個過程。將這個問題的本質想清楚就會很容易寫程式碼了。

class
Solution { public: /* * @param digits: a number represented as an array of digits * @return: the result */ vector<int> plusOne(vector<int> &digits) { // write your code here vector<int> res; if (digits.size() == 0) return res; int size = digits.size() - 1
; for (int i = size; i >= 0; i--) { if (digits[i] != 9) { digits[i] += 1; return digits; } else { digits[i] = 0; if (i == 0) { digits[i] = 1; digits.push_back(0); } } } return
digits; } };