Dav*_*rth 6 javascript combinations
我在数组中有几个数字
var numArr = [1, 3, 5, 9];
Run Code Online (Sandbox Code Playgroud)
我想循环遍历该数组并将每个唯一的3个数字组合相乘,如下所示:
1 * 3 * 5 =
1 * 3 * 9 =
1 * 5 * 9 =
3 * 5 * 9 =
Run Code Online (Sandbox Code Playgroud)
然后返回所有计算的数组
var ansArr = [15,27,45,135];
Run Code Online (Sandbox Code Playgroud)
有人有优雅的解决方案?提前致谢.
Mar*_*tos 12
用于生成组合的通用算法如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以这样称呼它:
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);
Run Code Online (Sandbox Code Playgroud)
...对于给定的输入,产生这个:
15,21,27,33,35,45,55,63,77,99,105,135,165,189,231,297,315,385,495,693
Run Code Online (Sandbox Code Playgroud)