【Lintcode】加一
阿新 • • 發佈:2019-01-02
題目描述:
給定一個非負數,表示一個數字陣列,在該數的基礎上+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;
}
};