首页 > Web开发 > 详细

JS求组合数

时间:2020-09-26 09:33:07      阅读:28      评论:0      收藏:0      [点我收藏+]

获取从[0, 1, 2, ... , m]闭区间的数中任选m个数,求其组合和组合的个数,即

\[C_n^m \]

// 获取[1, end]闭区间的组合数
function getCombine(end, num) {
  if (num > end + 1 || num === 0) {
    return []
  }
  let set = new Set()

  f(num)

  /**
   *
   * @param round 要循环几层
   * @param arr
   */
  function f(round, arr = []) {
    if (round === 0) return
    for (let i = 1; i <= end; i++) {
      if (round === 1) { // 最内层的循环
        let result = [...arr, i]
        if (isSet(result)) {
          result = result.sort()
          result = result.join(‘ ‘)
          set.add(result)
        }
      }
      f(round - 1, [...arr, i])
    }
  }

  return Array.from(set)
}


function isSet(arr) {
  return new Set(arr).size === arr.length
}
// no-log
// log
let c1 = getCombine(6, 4)
console.log(c1)

let c2 = getCombine(10,3)
console.log(c2.length)

JS求组合数

原文:https://www.cnblogs.com/oceans/p/13733274.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!