繁体   English   中英

向由数字数组表示的数字加1

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM