Subsets II

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],

  []

]

C++代码实现:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;



class Solution

{

public:

    vector<vector<int> > subsetsWithDup(vector<int> &S)

    {

        if(S.empty())

            return vector<vector<int>>();

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

        int n=1<<S.size();

        int i=0;

        vector<vector<int> > ret;

        while(i<n)

        {

            vector<int> temp;

            int index=0;

            int j=i;

            while(j>0)

            {

                if(j&1)

                    temp.push_back(S[index]);

                j=j>>1;

                index++;

            }

            int k;

            for(k=0;k<(int)ret.size();k++)

            {

                if(ret[k]==temp)

                    break;

            }

            if(k==(int)ret.size())

                ret.push_back(temp);

            i++;

        }

        return ret;

    }

};



int main()

{

    Solution s;

    vector<int> vec= {2,1,2};

    vector<vector<int> > result=s.subsetsWithDup(vec);

    for(auto a:result)

    {

        for(auto v:a)

            cout<<v<<" ";

        cout<<endl;

    }

}

 

方法二:
class Solution {

public:

    vector<vector<int> > subsetsWithDup(vector<int> &S) {

        if(S.empty())

            return vector<vector<int> > ();

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

        vector<vector<int> > res={{}};

        vector<vector<int> > last;

        vector<vector<int> > tmp;

        int i,j;

        int n=S.size();

        int m=res.size();

        for(i=0;i<n;i++)

        {

            if(i>0&&S[i]==S[i-1])

            {

                m=last.size();

                tmp=last;

            }

            else

            {

                m=res.size();

                tmp=res;

            }

            last.clear();

            for(j=0;j<m;j++)

            {

                tmp[j].push_back(S[i]);

                last.push_back(tmp[j]);

                res.push_back(tmp[j]);

            }

        }

        return res;

    }

};

https://leetcode.com/discuss/25834/share-a-clear-solution

你可能感兴趣的:(set)