Given a set of distinct integers, nums, 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 nums = [1,2,3], a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
1 class Solution { 2 private: 3 vector<vector<int> >ret; 4 5 public: 6 void dfs(int dep,int maxDep,vector<int> &num,vector<int> a,int start) 7 { 8 ret.push_back(a); 9 10 if(dep==maxDep) 11 return ; 12 13 for(int i=start;i<num.size();i++) 14 { 15 vector<int> b(a); 16 b.push_back(num[i]); 17 dfs(dep+1,maxDep,num,b,i+1); 18 } 19 } 20 21 vector<vector<int> > subsets(vector<int>& nums) { 22 sort(nums.begin(),nums.end()); 23 ret.clear(); 24 vector<int> a; 25 dfs(0,nums.size(),nums,a,0); 26 27 return ret; 28 } 29 };
II:
Given a collection of integers that might contain duplicates, nums, 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 nums = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
1 class Solution { 2 private: 3 vector<vector<int> >ret; 4 public: 5 void dfs(int dep,int maxDep,vector<int> &num,vector<int> a,int start) 6 { 7 8 ret.push_back(a); 9 10 if(dep==maxDep) return ; 11 12 for(int i=start;i<num.size();i++) 13 { 14 if(i!=start&&num[i]==num[i-1]) continue; 15 vector<int> b(a); 16 b.push_back(num[i]); 17 dfs(dep+1,maxDep,num,b,i+1); 18 } 19 20 21 } 22 vector<vector<int>> subsetsWithDup(vector<int>& nums) { 23 sort(nums.begin(),nums.end()); 24 ret.clear(); 25 vector<int> a; 26 a.clear(); 27 dfs(0,nums.size(),nums,a,0); 28 return ret; 29 } 30 };