leetcode子集javascript代码返回空数组

时间:2018-01-10 21:28:05

标签: javascript algorithm

我是算法的新手,对于一个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;
&#13;
&#13;

任何想法都会很棒!谢谢!

1 个答案:

答案 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; }