LeetCode第 39 题:组合总数(C++)_qq_32523711的博客-CSDN博客
区别在于元素不能够重复。
还有注意这题的元素有重复的,比如例子排序后的[1,1,2,5,6,7,10],两个1都选的话会导致结果有重复路径,注意跳过就好。
其他思路和39题如出一辙
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void backtrack(vector<int> &a, int idx, int target){
if(target == 0){
res.push_back(path);
return;
}
for(int i = idx; i < a.size(); ++i){
if(target - a[i] < 0) break;
path.push_back(a[i]);
backtrack(a, i+1, target - a[i]);
path.pop_back();
while(i < a.size()-1 && a[i+1] == a[i]) ++i;//跳过重复元素
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
backtrack(candidates, 0, target);
return res;
}
};