这是我遇到的递归代码

时间:2019-12-08 15:57:22

标签: c++ recursion

问题是- 给定一组候选数(C)和目标数(T),在C中找到所有唯一组合,其中候选数之和等于T。

可以从C个无限次中选择相同的重复数。

注意: 所有数字(包括目标)都是正整数。

组合(a1,a2,...,ak)中的元素必须按降序排列。 (即a1≤a2≤…≤ak)。

组合本身必须按升序排序。

CombinationA> CombinationB iff(a1> b1)OR(a1 = b1 AND a2> b2)OR…(a1 = b1 AND a2 = b2 AND…ai = bi AND ai + 1> bi + 1)

解决方案集不得包含重复的组合。

例如, 给定候选项集2,3,6,7和目标7 一个解决方案集是:

[2,2,3] [7]

问题是,尽管我可以使用下面的代码生成答案,但是答案中有些重复的组合却无法弄清原因。

例如-当我将数字{2,2,3}和目标设为6时,我应该得到2套-{2,2,2}和{3,3}。当我通过此代码获得5时-{2,2,2},{2,2,2},{2,2,2},{2,2,2},{3,3}。 / p>

我不知道为什么会这样。有人可以帮我吗?


void checker(vector<int> &subsets, vector<vector<int>> &results, int index, vector<int> &A, int B){

        int sum = 0;
        for(int x = 0; x <subsets.size(); x++) sum += subsets[x];

        if (sum==B) results.push_back(subsets);

        if(sum <B){

            for(int i = index; i <A.size(); i++){
                subsets.push_back(A[i]);

                checker(subsets, results, i, A, B);

                subsets.pop_back();
            }
        }


}



vector<vector<int> > Solution::combinationSum(vector<int> &A, int B) {

    vector<vector<int>> results;
    vector<int> subsets;
    sort(A.begin(), A.end());
    int index = 0;
    checker(subsets, results, index, A, B);
    return results;


}

0 个答案:

没有答案