ZBLOG

class Solution { public: std::vector result; std::map Map; int SumPath(vector &path) { int sum = 0; for (const auto &item : path) { sum += item; } retu...

在你提供的代码中,有几个问题需要修正:

  1. std::pair<int, int> p = *map.begin();应为std::pair<int, int> p = *Map.begin();,变量名应与定义一致。

  2. map.erase(Map.begin());应为Map.erase(p.first);,需要删除已经使用过的数字。

  3. 在内层循环 for (int j = 0; j < i; j++) 中,将条件改为 j <= i ,以包含等于的情况。

修复后的代码如下所示:

class Solution {
public:
    std::vector<std::vector<int>> result;
    std::map<int, int> Map;

    int SumPath(vector<int>& path) {
        int sum = 0;
        for (const auto& item : path) {
            sum += item;
        }
        return sum;
    }

    void backtrace(vector<int> path, std::map<int, int>& map, int target, int total, int epoch) {
        if (SumPath(path) == target) {
            result.push_back(path);
            return;
        } else if (epoch > total) {
            return;
        }

        std::pair<int, int> p = *map.begin();
        map.erase(p.first);
        int num = p.first;
        int times = p.second;

        for (int i = 0; i <= times; i++) {
            for (int j = 0; j < i; j++) {
                path.push_back(num);
            }

            backtrace(path, map, target, total, epoch + 1);

            for (int j = 0; j < i; j++) {
                path.pop_back();
            }
        }
    }

    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        for (const auto& item : candidates) {
            Map[item]++;
        }

        backtrace(vector<int>{}, Map, target, Map.size(), 1);

        return result;
    }
};

修复后的代码逻辑上应该可以正确执行,但请注意使用前要确保输入参数的合法性,并根据实际需求进行适当的调整。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9807

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?