subsets-ii

来源:互联网 发布:数据挖掘十大经典算法 编辑:程序博客网 时间:2024/06/05 08:13

给定一个可能具有重复数字的列表,返回其所有可能的子集

样例

如果S = [1,2,2],一个可能的答案为:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]
注意

子集中的每个元素都是非降序的

两个子集间的顺序是无关紧要的

解集中不能包含重复子集

class Solution {public:    vector<vector<int> > subsetsWithDup(const vector<int> &s) {        vector<int>S=s;        sort(S.begin(),S.end());        int n=S.size();        vector<vector<int>>res;        if(n==0) return res;        res.assign(1,vector<int>());        for(int i=0;i<n;i++){            int len=res.size();            for(int j=0;j<len;j++){                res.push_back(res[j]);                res.back().push_back(S[i]);            }        }        for(auto it=res.begin()+1;it!=res.end();){            if(find(res.begin(),it,*it)!=it) it=res.erase(it);            else it++;        }        return res;    }};


0 0
原创粉丝点击