递归 - 求助一个关于排列组合的算法
本文介绍了递归 - 求助一个关于排列组合的算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
先贴一段代码
const arr = [[], [], [], ...] // 一个不定长度的二维数组
const data = []
if (arr.length == 2) {
let p0 = arr[0]
let p1 = arr[1]
for (let x = 0; x < p0.length; x++) {
for (let y = 0; y < p1.length; y++) {
data.push([p0[x], p1[y]])
}
}
}
if (arr.length == 3) {
let p0 = arr[0]
let p1 = arr[1]
let p2 = arr[2]
for (let x = 0; x < p0.length; x++) {
for (let y = 0; y < p1.length; y++) {
for (let z = 0; z < p2.length; z++) {
data.push([p0[x], p1[y], p2[z]])
}
}
}
}
// ...
console.log(data)
哪位大神能把它抽象成一个函数,估计是要用到递归的
解决方案
try
function cartesianProduct(a) {
let i, j, l, m, a1, o = [];
if (!a || a.length == 0) return a
a1 = a.splice(0, 1)[0]
a = cartesianProduct(a);
for (i = 0, l = a1.length; i < l; i++) {
if (a && a.length) for (j = 0, m = a.length; j < m; j++)
o.push([a1[i]].concat(a[j]))
else
o.push([a1[i]])
}
return o
}
这篇关于递归 - 求助一个关于排列组合的算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文