【发布时间】:2020-09-07 20:56:16
【问题描述】:
问题基本上是在给定一个唯一整数数组的情况下生成所有子集。
例如powerSet[1,2,3] 应该返回[[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]
这是我的递归尝试:
function powerset(array) {
// Write your code here.
let set = [[]];
powersetHelper(array, [], set);
return set;
}
function powersetHelper(array, subset, set) {
if (array.length === 0) return;
for (let i = 0; i < array.length; i++) {
subset.push(array[i]);
set.push(subset);
}
let newArr = array.slice(1);
powersetHelper(newArr, [], set)
}
为什么这会返回 [[], [1, 2, 3], [1, 2, 3], [1, 2, 3], [2, 3], [2, 3], [3]] 而不是正确的解决方案?
此外,我反复尝试如下:
function powerset(array) {
// Write your code here.
let subset = [];
let set = [[]];
while (array.length > 0) {
for (let j = 0; j < array.length; j++) {
let num = array[j];
subset.push(num);
set.push(subset);
}
array = array.slice(1);
}
return set;
}
这也是不正确的,并且以某种方式返回了我在下面的内容,即使它似乎与我的递归解决方案的逻辑相同
[
[],
[1, 2, 3, 2, 3, 3],
[1, 2, 3, 2, 3, 3],
[1, 2, 3, 2, 3, 3],
[1, 2, 3, 2, 3, 3],
[1, 2, 3, 2, 3, 3],
[1, 2, 3, 2, 3, 3]
]
【问题讨论】:
标签: javascript arrays algorithm recursion