跟I做法一样,不过在dfs的时候要加一个判断条件。在理解了I的做法的基础上去想就很容易明白了。
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
ans.clear();
v.clear();
ans.push_back(v);
sort(S.begin(), S.end());
for(int i = 1; i <= S.size(); i++){
v.clear();
dfs(S, 0, 0, i);
}
return ans;
}
void dfs(vector<int> &S, int cnt, int index, int sum){
if(cnt == sum){
ans.push_back(v);
return ;
}
for(int i = index; i < S.size(); i++){
if(i > index && S[i] == S[i-1]){
continue;
}
v.push_back(S[i]);
dfs(S, cnt+1, i+1, sum);
v.pop_back();
}
}
vector<int> v;
vector<vector<int> > ans;
};