问题如下:
给定一个非负数表示为数字数组, 将数字加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,我无法理解从最后弹出整数背后的逻辑! 请帮忙。
答案 0 :(得分:3)
逻辑
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
在将值递增1后,删除最后的任何0。
逻辑含糊不清,因为你永远不需要在答案集中找到xyz..0000。
逻辑构建器可能具有的示例:9999将更改为0000100,因此他删除了0以将转换转换为00001,这反转为形成10000,但由于此场景永远不会发生,因此代码应该从逻辑上删除。