问题是- 给定一组候选数(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;
}