我是算法新手,对leetcode问题有一个愚蠢的问题。问题是要求只包含不同整数的给定数组的所有子集。
在我的代码中,列表数组的console.log提供了我想要的内容,它是一组输入子集。但这并不能传递给结果。结果返回如下内容:[[],[],[],[],[],[],[],[]]
下面是我的代码:
const subsets = (nums) => {
let result = [];
let list = [];
const helper = (result, list, nums, position) => {
for (let i = position; i < nums.length; i++) {
list.push(nums[i]);
helper(result, list, nums, i + 1);
list.pop();
}
console.log(list) // this is what I want. but it does not pass down to result!!!
result.push(list);
}
helper(result, list, nums, 0)
return result;
}
任何想法都太棒了!谢谢!
问题是,您将相同的数组引用推到结果集。结果,您将看到所有数组的最后一个循环的数组。
为了获得所有单个阵列,您需要获得一份Array#slice
用于推送的副本。
result.push(list.slice());
这将创建一个具有所有值的新数组。
const subsets = (nums) => {
let result = [];
let list = [];
const helper = (result, list, nums, position) => {
for (let i = position; i < nums.length; i++) {
list.push(nums[i]);
helper(result, list, nums, i + 1);
list.pop();
}
result.push(list.slice());
}
helper(result, list, nums, 0);
return result;
}
console.log(subsets([1, 2, 3]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句