0
陣列表示數問題去如下:加1,由數字
鑑於表示爲數字陣列的非負數, 添加1〜數(遞增由數字表示的號碼) 。 數字的存儲方式使得最重要的數字位於列表的開頭。
解決方案:
class Solution {
public:
vector<int> plusOne(vector<int> &digits) {
reverse(digits.begin(), digits.end());
vector<int> ans;
int carry = 1;
for (int i = 0; i < digits.size(); i++) {
int sum = digits[i] + carry;
ans.push_back(sum%10);
carry = sum/10;
}
while (carry) {
ans.push_back(carry%10);
carry /= 10;
}
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
reverse(ans.begin(), ans.end());
reverse(digits.begin(), digits.end());
return ans;
}
};
這是同時在一個門戶網站解決我遇到的解決方案..
我不明白這一點:
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
爲什麼我們需要這個while循環?我嘗試自我評估例如9999的代碼,我無法理解從最後彈出整數的邏輯! 請幫忙。
我不認爲這是必要的,除非'數字'本身可以有前導零,但所需答案不允許它,沒有意義嗎? – shole
作爲一個提示,像這樣的情況下,你可以簡單地測試所有的情況下0,1,2,... 9,看看是否需要邏輯。由於多位或單位數字不是您的核心關注點(這裏的計算數學顯然是正確的) – shole