-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathLeetCode_78_41.cpp
More file actions
54 lines (51 loc) · 1.09 KB
/
LeetCode_78_41.cpp
File metadata and controls
54 lines (51 loc) · 1.09 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
* @lc app=leetcode id=78 lang=cpp
*
* [78] Subsets
*/
// T(n) = O(N*2^N), S(n) = O(1)
class Solution_backtracing
{
public:
vector<vector<int>> subsets(vector<int> &nums)
{
if (nums.size() == 0)
return subs;
dfs(nums, 0);
return subs;
}
private:
vector<vector<int>> subs;
vector<int> sub;
void dfs(vector<int> &nums, int i)
{
// process current
subs.push_back(sub);
for (int j = i; j < nums.size(); j++)
{
sub.push_back(nums[j]);
// drill down
dfs(nums, j + 1);
// restore
sub.pop_back();
}
}
};
// bitops, T(n) = O(N*2^N), S(n) = O(1)
class Solution
{
public:
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
int p = 1 << n;
vector<vector<int>> subs(p);
for (int i = 0; i < p; i++) {
for (int j = 0; j < n; j++) {
if ((i >> j) & 1) {
subs[i].push_back(nums[j]);
}
}
}
return subs;
}
};