Subsets II

来源:互联网 发布:阿里云服务器ftp网站 编辑:程序博客网 时间:2024/05/09 07:11

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],  []]
class Solution {public:    vector<vector<int> > subsetsWithDup(vector<int> &S)    {        vector<vector<int> > res;        vector<int> tmp;        res.push_back(tmp);        if (S.empty()) return res;        sort(S.begin(), S.end());                int preInt = 0;        vector<vector<int> > pre;        for (int i = 0; i < S.size(); i++)        {           if(!pre.empty() && S[i] == preInt)           {                for(int j = 0; j < pre.size(); j++)                {                   pre[j].push_back(S[i]);                }           }           else           {               pre.clear();               pre.insert(pre.begin(), res.begin(), res.end());               for(int j = 0; j < res.size(); j++)               {                   pre[j].push_back(S[i]);               }           }           res.insert(res.end(), pre.begin(), pre.end());           preInt = S[i];        }        return res;    }};

包含了重复元素,所以如果当前值大于上一个值,需要对每个vector增加当前值并附加到原来vector,如果相等只对上一次附加过的那部分值附加

稍微简化一点版

class Solution {public:    vector<vector<int> > subsetsWithDup(vector<int> &S)    {        vector<vector<int> > res;        vector<int> tmp;        res.push_back(tmp);        if (S.empty()) return res;        sort(S.begin(), S.end());                vector<vector<int> > pre;        for (int i = 0; i < S.size(); i++)        {           if(!pre.empty() && S[i] == pre[0][0])           {                for(int j = 0; j < pre.size(); j++)                {                   pre[j].push_back(S[i]);                }           }           else           {               pre.clear();               pre.insert(pre.begin(), res.begin(), res.end());               for(int j = 0; j < res.size(); j++)               {                   pre[j].push_back(S[i]);               }           }           res.insert(res.end(), pre.begin(), pre.end());        }        return res;    }};





0 0
原创粉丝点击