您的位置:首页 > 其它

LeetCode-Subsets II-可重复子集和-DFS

2014-10-12 23:22 429 查看
https://oj.leetcode.com/problems/subsets-ii/

预处理一下记录每个数字以及其出现的次数。然后在DFS时枚举出现次数即可。

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;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: