给定一个唯一数字数组,请列出总和等于给定整数的数字组合

时间:2019-01-11 10:28:10

标签: javascript lodash

输入     数组= [4,2,8,11,14,6,1]      预期总数= 20

输出       [2,4,6,8],[11,8,1],[6,11,1,2],[2,14,4],[14,6]

代码: const arr = [4,2,8,11,14,6,1]; const target = 20; res = .filter(arr,v => .filter(arr,v1 => .filter(arr,v2 => .filter(arr,v3 => v + v1 + v2 + v3 === target))); console.log(res);

我是javascript和lodash的初学者。.我自己尝试过此代码。.请帮助我编写出色的代码。.

1 个答案:

答案 0 :(得分:3)

您可以使用临时数组和索引,并通过获取或不获取实际值来迭代下一个索引。

function subsetSum(array, sum) {

    function iter(index, temp, s) {
        if (s === sum) return result.push(temp.slice());              // exit sum found
        if (index >= array.length) return;                            // exit index over
        iter(index + 1, temp.concat(array[index]), s + array[index]); // take value
        iter(index + 1, temp, s);                                     // omit value
    }

    var result = [];
    iter(0, [], 0);
    return result;
}

console.log(subsetSum([4, 2, 8, 11, 14, 6, 1], 20).map(a => a.join(' ')));