题意理解:
同39,但是,
1)要求同一元素不能重复使用;
2)输入元素中可能出现重复的内容,所以,剪枝过程要再39的基础上做调整;
解题代码:
class Solution {
private:
vector<vector<int>> ans;
void dfs(vector<int> candi, int index, vector<int> preAns, int tar){
int size=candi.size();
if(index>size){
return;
}
int pre=-1;
for(int i=index; i<size; i++){
if(candi[i]==pre){
continue;
}
vector<int> t(preAns);
t.push_back(candi[i]);
if(candi[i]<tar){
pre=candi[i];
dfs(candi, i+1, t, tar-candi[i]);
}else if(candi[i]>tar){
return;
}else{
ans.push_back(t);
return;
}
}
}
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
vector<int> pre;
dfs(candidates, 0, pre, target);
return ans;
}
};