输入 数组= [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的初学者。.我自己尝试过此代码。.请帮助我编写出色的代码。.
答案 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(' ')));