C++ 将1添加到由数字数组表示的数字
问题如下: 给定一个表示为数字数组的非负数, 数字加1(增加数字表示的数字)。 存储数字时,最有效的数字位于列表的开头 解决方案:C++ 将1添加到由数字数组表示的数字,c++,algorithm,math,vector,stl,C++,Algorithm,Math,Vector,Stl,问题如下: 给定一个表示为数字数组的非负数, 数字加1(增加数字表示的数字)。 存储数字时,最有效的数字位于列表的开头 解决方案: class Solution { public: vector<int> plusOne(vector<int> &digits) { reverse(digits.begin(), digits.end()); vector&l
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循环?我试着对代码进行自评估,例如9999,但我无法理解从末尾弹出整数背后的逻辑!
请帮忙。逻辑
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
将值增加1后,删除末尾的任何0
逻辑是模糊的,不需要,因为您永远不需要在答案集中找到xyz..0000
逻辑构建器可能具有的示例:9999将被更改为0000100,因此他删除0以将转换转换为00001,该转换被反转为10000形式,但由于这种情况永远不会发生,因此应该从逻辑中删除代码 逻辑
while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
ans.pop_back();
}
将值增加1后,删除末尾的任何0
逻辑是模糊的,不需要,因为您永远不需要在答案集中找到xyz..0000
逻辑构建器可能具有的示例:9999将被更改为0000100,因此他删除0以将转换转换为00001,该转换被反转为10000形式,但由于这种情况永远不会发生,因此应该从逻辑中删除代码 我也不认为这是必要的,除非
数字本身可以有前导零,但要求的答案不允许,没有意义,对吗?作为提示,像这样的案例,您可以简单地测试所有案例的0,1,2,…9,看看是否需要逻辑。由于多位数或单位数不是您的核心关注点(这里的携带数学显然是正确的),我认为没有必要这样做,除非数字本身可以有前导零,但要求的答案不允许,没有意义,对吗?作为提示,像这样的案例,您可以简单地测试所有案例的0,1,2,…9并查看是否需要逻辑。因为多位数或单位数不是你的核心问题(这里的数学显然是正确的)