【问题标题】:Backtrackig issue回溯问题
【发布时间】:2020-12-20 15:05:22
【问题描述】:

给定两个整数nk,返回1 2 3 ... k个数的所有可能组合n。确保对组合进行排序。

我的代码如下:

void answer(vector<vector<int>> op, vector<int> temp, int index, int A, int B){

    if(!B){
        op.push_back(temp);
        return;
    }

    for(int i=index; i<=(A-B+1); i++){
        temp.push_back(i);
        answer(op, temp, i+1, A, B-1);
        temp.pop_back();
    }
    return;
}

vector<vector<int> > Solution::combine(int A, int B) {
    
    vector<int> temp;
    vector<vector<int>> op;
    
    if(B>A)
        return op;
    answer(op, temp, 1, A, B);
    return op;
}

它甚至没有通过 A=B=1 的简单情况,因为它返回 NULL 而不是输出 [1]。

【问题讨论】:

  • 尝试创建一个使用这些函数的minimal reproducible example,并对导致其失败的数据进行硬编码。然后使用调试器逐语句逐句执行代码,同时监视变量及其值。这是查找和修复此类错误的正常方法。

标签: c++ computer-science


【解决方案1】:

vector&lt;vector&lt;int&gt;&gt; op 参数是所传递内容的副本,因此op.push_back 的结果不会出现在调用者身上。

您应该添加&amp; 并改用引用vector&lt;vector&lt;int&gt;&gt;&amp; op

还应将vector&lt;int&gt; temp 引用为vector&lt;int&gt;&amp; temp 以提高性能。

【讨论】:

  • 天哪!太感谢了!这么多!
猜你喜欢
  • 2019-07-06
  • 2012-07-04
  • 1970-01-01
  • 2021-02-25
  • 2015-06-21
  • 2012-03-03
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多