排列组合的实现(js描述)
2021-05-05 23:29
标签:png mic function 添加 高中 fun 排列组合 测试用例 高考 犹记得高中数学,组合表示C(m, n),意思为从集合m,选出n个数生成一项,总共有多少个项的可能?组合是无序的,排列是有序的。所以排列的项数量多于组合 新高考高考选科,需要用到排列组合。。历史物理2选1。生物,化学,政治,地理4选2。 排列组合的实现(js描述) 标签:png mic function 添加 高中 fun 排列组合 测试用例 高考 原文地址:https://www.cnblogs.com/damonFeng/p/12104100.html组合的实现
排列组合描述和公式
组合的实现
/**
* 求:组合C(m, n),m为上标,n为下标。m选n的所有项
* m {必传} 原始数据
* n {必传} 当前项还需元素的个数
* currentIndex 当前索引
* choseArr 当前项的部分元素集合(不是完整项,是生成完整项的一个中间状态)
* result 所有项的结果结合
*/
function cmn(m, n, currentIndex = 0, choseArr = [], result = []) {
let mLen = m.length
// 可选数量小于项所需元素的个数,则递归终止
if (currentIndex + n > mLen) {
return
}
for (let i = currentIndex; i 2,choseArr还需要两个以上的元素,才能生成一个新的完整项。则递归,往choseArr添加元素
cmn(m, n - 1, i + 1, [...choseArr, m[i]], result)
}
return result
}
// test 测试用例
var arr1 = ['a', 'b', 'c', 'd']
console.log('arr1111', cmn(arr1, 2))
应用领域