leetcoed90. Subsets II(集合子集去重)

来源:互联网 发布:知科地方门户网站系统 编辑:程序博客网 时间:2024/06/06 19:06

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

Note: The solution set must not contain duplicate subsets.

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

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

]

分析:

后加入的元素,需要加入全部已有的集合,并且考虑重复。

再次考虑S={1,2,2},先排序。

首先加入空集{}

对于元素1,需要加入{},成为新的集合{1}

对于元素2,需要加入{}和{1},成为新的集合{2}和{1,2}。考虑重复,再产生新集合{2,2}和{1,2,2}。

ac代码:

class Solution {public:    vector<vector<int>> subsetsWithDup(vector<int>& nums) {        vector<vector<int>> ret;        vector<int>empty,newset;        unordered_map<int,int>count;        ret.push_back(empty);        int i,j,L=nums.size(),L2,k;        for(i=0;i<L;i++)            count[nums[i]]++;        sort(nums.begin(),nums.end());        vector<int>::iterator ite=unique(nums.begin(),nums.end());        nums.erase(ite,nums.end());        L2=nums.size();        for(i=0;i<L2;i++)        {            int s=ret.size();            for(j=0;j<s;j++)            {                newset=ret[j];                for(k=0;k<count[nums[i]];k++)                {                    newset.push_back(nums[i]);                    ret.push_back(newset);                }            }        }        return ret;    }};

0 0
原创粉丝点击