在数组中找到可以求和为目标值的数字

我们需要编写一个JavaScript函数,该函数将数字数组作为第一个参数,并将单个数字作为第二个参数。

该函数应该从数组中挑选出这样的元素,当添加元素时,该元素将给出数组第二个参数指定的总和。该函数应返回一个包含所有此类数字子数组的数组,这些子数组相加后将得出所需的总和。

请注意,顺序并不重要,如果需要,我们可以自由使用一个以上的数字来产生总和。

例如-

如果输入数组和总和为-

const arr = [14, 6, 10];
const sum = 40;

那么输出应该是-

const output = [
   [ 14, 14, 6, 6 ],
   [ 14, 6, 10, 10 ],
   [ 6, 6, 6, 6, 6, 10 ],
   [ 10, 10, 10, 10 ]
];

示例

const arr = [14, 6, 10];
const sum = 40;
const findSum = (arr, sum) => {
   const res = [];
   const search = (index, part = []) => {
      const s = part.reduce((a, b) => a + b, 0);
      if (s === sum){
         res.push(part)
      };
      if (s >= sum || index >= arr.length){ return; };
         search(index, part.concat(arr[index]));
         search(index + 1, part);
   };
   search(0);
   return res;
}
console.log(findSum(arr, sum));

输出结果

这将产生以下输出-

[
   [ 14, 14, 6, 6 ],
   [ 14, 6, 10, 10 ],
   [ 6, 6, 6, 6, 6, 10 ],
   [ 10, 10, 10, 10 ]
]