0
の配列によって表される数に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のコードを評価しようとしましたが、最後から整数をポップするロジックを理解できませんでした! 助けてください。
'digits'自体が先行ゼロを持つことはできませんが、それを許さない答えが必要なのではないかと思います。 – shole
ヒントとして、このような場合は、すべてのケースを0,1,2、... 9として簡単にテストし、ロジックが必要かどうかを確認するだけです。複数の桁または1桁はあなたの中心的な関心事ではありません(ここでの計算は明らかです) – shole