标签:
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
For example,
If nums = [1,2,2]
,
a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], []]
解题思路:
和subset :http://blog.csdn.net/sinat_24520925/article/details/46835209相同的思路,不过每次生成子集之后都要判断子集集合中是否存在,不存在则存储,存在就放弃。
代码如下:
class Solution { public: void int_to_bool(int n,vector<int>&index) { int len=index.size(); index.clear(); index.resize(len); int i=0; while(n) { int temp=n%2; index[i]=temp; i++; n/=2; } } vector<vector<int>> subsetsWithDup(vector<int>& nums) { vector<vector<int>> res; int n=nums.size(); if(n<1) return res; vector<int> index(n,0); for(int i=0;i<(1<<n);i++) { int_to_bool(i,index); vector<int> temp; for(int j=0;j<n;j++) { if(index[j]==1) temp.push_back(nums[j]); } sort(temp.begin(),temp.end()); int flag=0; for(int j=0;j<res.size();j++) { if(res[j].size()==temp.size()) { int t; for(t=0;t<temp.size();t++) { if(res[j][t]!=temp[t]) { break; } } if(t==temp.size()) { flag=1;//已有相同的并加入到了res break; } } } if(flag==0) res.push_back(temp); } return res; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/sinat_24520925/article/details/47113325