[LeetCode] Subsets II

来源:互联网 发布:淘宝hd 2.6.1版本 编辑:程序博客网 时间:2024/05/17 00:01

Given a collection of integers that might contain duplicates, S, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.

For example,
If S = [1,2,2], a solution is:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]

Solution 1:

class Solution {public:    vector<vector<int> > subsetsWithDup(vector<int> &S) {        sort(S.begin(), S.end());        vector<vector<int>> result;        int len = S.size();        int maxLen = pow(2, len);        for(int i = 0; i < maxLen; i++)        {            vector<int> temp;            for(int j = 0; j < len; j++)            {                if(i & (1 << j))                    temp.push_back(S[j]);            }            if(find(result.begin(), result.end(), temp) == result.end())                result.push_back(temp);        }        return result;    }};

Solution 2:

class Solution {public:    vector<vector<int>> result;    void generate(vector<int> &S, vector<int> temp, int level)    {        if(level == S.size())        {            if(count(result.begin(), result.end(), temp) == 0)                result.push_back(temp);            return;        }        generate(S, temp, level+1);        temp.push_back(S[level]);        generate(S, temp, level+1);    }    vector<vector<int> > subsetsWithDup(vector<int> &S) {        sort(S.begin(), S.end());        result.clear();        vector<int> temp;        generate(S, temp, 0);        return result;    }};

Solution 3:

class Solution {public:    set<vector<int>> result;    void generate(vector<int> &S, vector<int> temp, int level)    {        if(level == S.size())        {            result.insert(temp);            return;        }        generate(S, temp, level+1);        temp.push_back(S[level]);        generate(S, temp, level+1);    }    vector<vector<int> > subsetsWithDup(vector<int> &S) {        sort(S.begin(), S.end());        result.clear();        vector<int> temp;        generate(S, temp, 0);        vector<vector<int>> ret(result.begin(), result.end());        return ret;    }};


0 0