我是算法的新手,对于一个leetcode问题有一个愚蠢的问题。问题是要求给定数组的所有子集只包含不同的整数。
在我的代码中,list数组的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;
}
&#13;
任何想法都会很棒!谢谢!
答案 0 :(得分:0)
问题是,您将相同的数组引用推送到结果集。结果,您将看到所有阵列的最后一个循环的数组。
要获取所有单个数组,您需要获得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; }