首页 > 其他分享 >lintcode: Subsets II

lintcode: Subsets II

时间:2022-12-01 19:04:04浏览次数:34  
标签:cur Subsets res lintcode dfs II vector S2 choosed


Given a list of numbers that may has duplicate numbers, return all possible subsets

1.
先排序;
再按求Subsets一样的做法,只是添加前检查是否已经存在。
耗时171ms

class Solution {
public:
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
vector<vector<int> >res;

void dfs(const vector<int> &S,vector<bool> choosed,int cur){
if(cur==S.size()){
vector<int> sub;
for(int i=0;i<choosed.size();i++){
if(choosed[i]){
sub.push_back(S[i]);
}
}

vector<vector<int> >::iterator it=find(res.begin(),res.end(),sub);

if(it==res.end()){
res.push_back(sub);
}

return;
}

choosed[cur]=true;
dfs(S,choosed,cur+1);
choosed[cur]=false;
dfs(S,choosed,cur+1);
}

vector<vector<int> > subsetsWithDup(const vector<int> &S) {
// write your code here

int len=S.size();

vector<int> S2(S);

sort(S2.begin(),S2.end());

vector<bool> choosed(len,false);

dfs(S2,choosed,0);

return res;

}
};

2.


标签:cur,Subsets,res,lintcode,dfs,II,vector,S2,choosed
From: https://blog.51cto.com/u_15899184/5903615

相关文章