[英]add 1 to number represented by array of digits
问题如下:
给定一个以数字数组表示的非负数,请将数字加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,但我不明白从末尾弹出整数的逻辑! 请帮忙。
逻辑
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
将值增加1后,最后删除所有0。
逻辑很模糊,不需要,因为您永远都不需要在答案集中找到xyz..0000。
逻辑生成器可能具有的示例:9999将更改为0000100,因此他删除了0,将转换转换为00001,并将其反转为10000,但是由于这种情况永远不会发生,因此应从逻辑中删除代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.