使用javascript输出数字数组的每个组合 [英] Output each combination of an array of numbers with javascript
本文介绍了使用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屋!
查看全文