-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAll_subsets_recursion.cpp
More file actions
40 lines (37 loc) · 988 Bytes
/
Copy pathAll_subsets_recursion.cpp
File metadata and controls
40 lines (37 loc) · 988 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void subsets(vector<int>&set,vector<int>&ans,int i,vector<vector<int>>&all_subsets){
if(i == set.size()){
all_subsets.push_back(ans);
return;
}
int idx = i+1;
ans.push_back(set[i]);
subsets(set,ans,i+1,all_subsets);
ans.pop_back();
while(idx < set.size() && set[idx] == set[idx-1]){
idx++;
}
subsets(set,ans,idx,all_subsets);
}
vector<vector<int>>print_subsets(vector<int>&nums){
sort(nums.begin(),nums.end());
vector<vector<int>>allsubsets;
vector<int>ans;
subsets(nums,ans,0,allsubsets);
return allsubsets;
}
int main(){
vector<int>arr{1,2,3};
vector<vector<int>> allsubsets = print_subsets(arr);
for (auto subset : allsubsets) {
cout << "{ ";
for (int num : subset) {
cout << num << " ";
}
cout << "}" << endl;
}
return 0;
}