题目描述
思路分析
DFS+去重操作
对于相同的数,我们枚举“选几个”而不是“选谁”
代码实现
```cpp
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void dfs(int u,int sum,vector<int>& a){
if(sum==0){
res.push_back(path);
return;
}
if(u==a.size()) return;
int k=u+1;
while(k<a.size()&&a[k]==a[u]) k++;
int cnt=k-u;
for(int i=0;i*a[u]<=sum&&i<=cnt;i++){
dfs(k,sum-i*a[u],a);
path.push_back(a[u]);
}
for(int i=0;i*a[u]<=sum&&i<=cnt;i++) path.pop_back();
}
vector<vector<int>> combinationSum2(vector<int>& a, int k) {
sort(a.begin(),a.end());
dfs(0,k,a);
return res;
}
};