将数字加1表示为数字

时间:2017-07-18 06:39:29

标签: c++ algorithm math vector stl

问题如下:

给定一个非负数表示为数字数组, 将数字加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,我无法理解从最后弹出整数背后的逻辑! 请帮忙。

1 个答案:

答案 0 :(得分:3)

逻辑

while (ans[ans.size() - 1] == 0 && ans.size() > 1) {
    ans.pop_back();
}

在将值递增1后,删除最后的任何0。

逻辑含糊不清,因为你永远不需要在答案集中找到xyz..0000。

逻辑构建器可能具有的示例:9999将更改为0000100,因此他删除了0以将转换转换为00001,这反转为形成10000,但由于此场景永远不会发生,因此代码应该从逻辑上删除。