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

查看:152
本文介绍了递归 - 求助一个关于排列组合的算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

先贴一段代码

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屋!

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