我是算法新手,有一个关于 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; }
关于javascript - leetcode 子集 javascript 代码返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48196360/