LeetCode-Subsets II-可重复子集和-DFS
https://oj.leetcode.com/problems/subsets-ii/
预处理一下记录每个数字以及其出现的次数。然后在DFS时枚举出现次数即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Solution { public: int n,m; vector <int> s; vector <int> d; vector<vector<int> > tot; vector <int> cur; void Solve(int p){ if (p==n){ tot.push_back(cur); return; } for (int i=0;i<=d[p];i++){ Solve(p+1); cur.push_back(s[p]); } for (int i=0;i<=d[p];i++){ cur.pop_back(); } } vector<vector<int> > subsetsWithDup(vector<int> &S) { map <int,int> cm; m=S.size(); for (int i=0;i<m;i++){ if (cm.find(S[i])==cm.end()) cm[S[i]]=1; else cm[S[i]]++; } n=cm.size(); s.resize(n); d.resize(n); map<int,int>::iterator it=cm.begin(); int count=0; for (;it!=cm.end();it++) { s[count]=it->first; d[count++]=it->second; } Solve(0); return tot; } };