使用javascript输出数字数组的每个组合 [英] Output each combination of an array of numbers with javascript

查看:91
本文介绍了使用javascript输出数字数组的每个组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在数组中有几个数字

var numArr = [1, 3, 5, 9];

我想循环遍历该数组并将每个唯一的3个数字组合相乘,如下所示:

I want to cycle through that array and multiply every unique 3 number combination as follows:

1 * 3 * 5 = 
1 * 3 * 9 = 
1 * 5 * 9 = 
3 * 5 * 9 =

然后返回所有计算的数组

Then return an array of all the calculations

var ansArr = [15,27,45,135];

任何人都有优雅的解决方案吗?在此先感谢。

Anyone have an elegant solution? Thanks in advance.

推荐答案

用于生成组合的通用算法如下:

A general-purpose algorithm for generating combinations is as follows:

function combinations(numArr, choose, callback) {
    var n = numArr.length;
    var c = [];
    var inner = function(start, choose_) {
        if (choose_ == 0) {
            callback(c);
        } else {
            for (var i = start; i <= n - choose_; ++i) {
                c.push(numArr[i]);
                inner(i + 1, choose_ - 1);
                c.pop();
            }
        }
    }
    inner(0, choose);
}

在您的情况下,您可以这样称呼它:

In your case, you might call it like so:

function product(arr) {
    p = 1;
    for (var i in arr) {
        p *= arr[i];
    }
    return p;
}

var ansArr = [];

combinations(
    [1, 3, 5, 7, 9, 11], 3,
    function output(arr) {
        ansArr.push(product(arr));
    });

document.write(ansArr);

...对于给定的输入,产生这个:

...which, for the given input, yields this:

15,21,27,33,35,45,55,63,77,99,105,135,165,189,231,297,315,385,495,693

这篇关于使用javascript输出数字数组的每个组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆