javascript - 计算数组中的组合产品

标签 javascript arrays algorithm

我有一个这样的数组:

const arr = [2, 3, 4, 12, 4, 55, 8, 16]

我想得到数组乘积的每五个元素的总和。 我目前的方法是使用五次for循环来计算结果。 真是他妈的! 有没有优雅的方法来解决?

输出应该与下面的方法相同:

 function getSum(arr) {
  let sum = 0
  for (let i = 0; i < arr.length - 4; i++) {
    for (let j = i + 1; j < arr.length - 3; j++) {
      for (let k = j + 1; k < arr.length - 2; k++) {
        for (let l = k + 1; l < arr.length - 1; l++) {
          for (let m = l + 1; m < arr.length; m++) {
            sum += arr[i] * arr[j] * arr[k] * arr[l] * arr[m]
         }
      }
    }
  }
 }
  return sum
}

上述示例的可能元组:

2 3 4 12 4
2 3 4 12 55
2 3 4 12 8
2 3 4 12 16
2 3 4 4 55
2 3 4 4 8
2 3 4 4 16
2 3 4 55 8
2 3 4 55 16
2 3 4 8 16
2 3 12 4 55
2 3 12 4 8
2 3 12 4 16
2 3 12 55 8
2 3 12 55 16
2 3 12 8 16
2 3 4 55 8
2 3 4 55 16
2 3 4 8 16
2 3 55 8 16
2 4 12 4 55
2 4 12 4 8
2 4 12 4 16
2 4 12 55 8
2 4 12 55 16
2 4 12 8 16
2 4 4 55 8
2 4 4 55 16
2 4 4 8 16
2 4 55 8 16
2 12 4 55 8
2 12 4 55 16
2 12 4 8 16
2 12 55 8 16
2 4 55 8 16
3 4 12 4 55
3 4 12 4 8
3 4 12 4 16
3 4 12 55 8
3 4 12 55 16
3 4 12 8 16
3 4 4 55 8
3 4 4 55 16
3 4 4 8 16
3 4 55 8 16
3 12 4 55 8
3 12 4 55 16
3 12 4 8 16
3 12 55 8 16
3 4 55 8 16
4 12 4 55 8
4 12 4 55 16
4 12 4 8 16
4 12 55 8 16
4 4 55 8 16
12 4 55 8 16

最佳答案

您可以使用迭代和递归方法,方法是检查所需的长度,然后使用索引处的元素或不使用索引处的元素再次调用函数。

function getCombinations(list, size) {

    function fork(index, values) {
        if (values.length === size) {
            result.push(values);
            return;
        }
        if (index >= list.length) {
            return;
        }
        fork(index + 1, values.concat(list[index]));
        fork(index + 1, values);
    }

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

var result = getCombinations([2, 3, 4, 12, 4, 55, 8, 16], 5),
    sum = result.reduce((s, a) => s + a.reduce((a, b) => a * b), 0);

console.log(sum);                          // 2927456
console.log(result.length);                //      56
console.log(result.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 计算数组中的组合产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040903/

相关文章:

javascript - 哪些 Javascript 库对 OCaml 代码的语法高亮有很好的支持?

javascript - 为什么在 Vue.js 中对 src 链接使用字符串插值时不显示我的图像?

javascript - ReactJS - 如何更新嵌套和 "normal"状态属性?

arrays - Jenkins Groovy 扩展属性数组

java - 将数组中的每个数字乘以 n - java

python - 从带时间戳的流量计数器创建摘要统计信息

算法 - 匹配学生考试中心

algorithm - 高效的节点流量分配

javascript - 在 Chrome/IE11/Firefox 中的隐藏空字段中设置值

PHP - 遍历 JSON 变量数组