-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsubsets.js
More file actions
77 lines (62 loc) · 1.47 KB
/
Copy pathsubsets.js
File metadata and controls
77 lines (62 loc) · 1.47 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* Iterative approach
* Time complexity - O(N * 2N)
* Space complexity - O(N * 2N)
* https://leetcode.com/problems/subsets
* @param {number[]} nums
* @return {number[][]}
*/
function subsets(nums) {
let output = [];
let n = 0;
let k = 0;
function backtrack(first, curr, nums) {
if (curr.length === k) {
output.push([...curr]);
return;
}
for (let i = first; i < n; ++i) {
curr.push(nums[i]);
backtrack(i + 1, curr, nums);
curr.pop();
}
}
n = nums.length;
for (k = 0; k < n + 1; ++k)
backtrack(0, [], nums);
return output;
}
// Non-iterative approach:
// function subsets(nums) {
// const res = [];
// const subset = [];
// function dfs(i) {
// if (i >= nums.length) {
// res.push([...subset]);
// return;
// }
// subset.push(nums[i]);
// dfs(i + 1);
// subset.pop();
// dfs(i + 1);
// }
// dfs(0);
// return res;
// }
/*
* Cascading solution
* Time complexity - O(N * 2N)
* Space complexity - O(N * 2N)
*/
// function subsets(nums) {
// let result = [[]];
// nums.forEach(n => {
// let newSubsets = [];
// result.forEach(subset => {
// newSubsets.push([...subset, n]);
// });
// result = [...result, ...newSubsets];
// });
// return result;
// }
module.exports = subsets;