求助一个关于排列组合的算法

发布于 2022-09-04 08:19:24 字数 629 浏览 22 评论 0

先贴一段代码

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)

哪位大神能把它抽象成一个函数,估计是要用到递归的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

佼人 2022-09-11 08:19:24

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
  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文