JavaScript 从一个数组中拿出N个数(可放回),问共有多少种

今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下:

function p(arr, N, ans){if(N === 0) return ans;if(ans.length === 0) return(p(arr, N-1, arr.slice(0)))let res = []for(let c = 0; c < arr.length; c++){let item = arr[c];ans.forEach(element => {let el = element + item;res.push(el)});}return p(arr, N-1, res)}console.log(p(['1', '2'], 4, []))  // 输出为['1111', '2111', '1211','2211', '1121', '2121','1221', '2221', '1112','2112', '1212', '2212','1122', '2122', '1222','2222'
]

javascript实现排列组合算法

命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M)

js解法:

    function queue(arr, size) {if (size > arr.length) { return; }var allResult = [];(function (arr, size, result) {if (result.length == size) {allResult.push(result);} else {for (var i = 0, len = arr.length; i < len; i++) {var newArr = [].concat(arr),curItem = newArr.splice(i, 1);arguments.callee(newArr, size, [].concat(result, curItem));}}})(arr, size, []);return allResult;}function choose(arr, size) {var allResult = [];(function (arr, size, result) {var arrLen = arr.length;if (size > arrLen) {return;}if (size == arrLen) {allResult.push([].concat(result, arr))} else {for (var i = 0; i < arrLen; i++) {var newResult = [].concat(result);newResult.push(arr[i]);if (size == 1) {allResult.push(newResult);} else {var newArr = [].concat(arr);newArr.splice(0, i + 1);arguments.callee(newArr, size - 1, newResult);}}}})(arr, size, []);return allResult;}function showResult(result) {console.log('The number of result sets: ' + result.length);for (var i = 0, len = result.length; i < len; i++) {console.log(result[i]);}}var arr = [1,2,3,4,5];showResult(choose(arr, 4));showResult(queue(arr, 4));

原文链接:http://www.cnblogs.com/kaiye/p/3606373.html

一个数组中找出n个元素组成新的数组,有多少种组合(用递归实现)

给定一个数组如:nums=[1, 2, 3, 4, 5, 6,7,8,9,10],取出其中任意N个元素,组成新的数组,求有多少种组合。

#1.思路

如果N确定,如N=4,此时,可以直接用四个for循环嵌套实现,但是当任意取出的个数N不固定时,此时不知道要用多少个for循环来实现,可考虑用递归来实现多个循环。

递归的思路:(假设输入N=4)
先找出第一个数的循环起止地址,在数组nums索引号为0~6,然后找出第二个是1到7,第三个是2到8,第三个是3到9,第四个数是4到10。

#2.JavaScript实现的代码

<script type="text/javascript">var nums=[1, 2, 3, 4, 5, 6,7,8,9,10];let N=4;function combine(arr,N){//存放索引号let res=[]//存放最后的结果var stack=[]arrayN(arr,0,N,N,res,stack)for(let i=0;i<stack.length;i++){console.log(stack[i])}}//start:为每个数的起始索引号。//count初始值为任意取出的元素的个数N,每一次递归count会减一,用于计算每个数的最后一位索引号和判断递归是否继续。//Num为常数,值是任意取出的元素的个数N,用于最后结果的输出。function arrayN(arr,start,count,Num,res,stack){//用递归实现,把N个循环用同一个循环实现for(let i=start;i<arr.length-count+1;i++){//记录索引号res[count-1]=i;if(count-1==0){let oneResult=[]for(let j=Num-1;j>=0;j--){oneResult.push(arr[res[j]])}stack.push(oneResult)}else{arrayN(arr,i+1,count-1,Num,res,stack)}}}combine(nums,N)
</script>

#3.结果

转载于:https://www.cnblogs.com/jinhei/p/12542392.html

https://www.cnblogs.com/Zeng-KI/articles/8523086.html

https://blog.csdn.net/weixin_56036824/article/details/114696653

js实现排列组合算法N选M相关推荐

  1. js排列组合算法解决方案

    之前文章中谈过排列组合算法,主要事递归,代码如下 const arrangeCombination = arr => {const res = [], len = arr.length, inn ...

  2. php 组合算法,PHP简单排列组合算法示例分享

    本文主要和大家介绍了PHP实现的简单排列组合算法,结合具体应用实例分析了排列组合算法的实现与使用技巧,需要的朋友可以参考下,希望能帮助到大家. 一.问题: 给你一个40斤的西瓜,给3个人分,有多少种分 ...

  3. python 排列组合速度_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  4. 排列组合算法之二: 01转换法_java改变后的c++改进版

    http://blog.csdn.net/canguanxihu/article/details/46363375 排列组合算法之一: 01转换法_java改变后的c++版 class ZuheAss ...

  5. 排列 组合 算法(一)

    排列组合算法 我们都知道排列与组合的个数可以利用公式很容易的求出来,但是要是把这些排列组合的序列一一输出怎么办呢? 下面结合<组合数学>(第四版)卢开澄卢华明编著,好好总结排列与组合的算法 ...

  6. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  7. java 获取排列组合_Java获得一个数组的指定长度排列组合算法示例

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组 ...

  8. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  9. python 排列组合算法_基于python快速实现排列组合算法

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库#_*_ coding:utf-8 _*_ #__author__= ...

最新文章

  1. Android 获取 屏幕状态栏高度和标题栏高度 避免出现0的情况
  2. centos6.2关于tomcat远程不能访问的问题处理过程
  3. Flink从入门到精通100篇(七)-如何基于 Flink 搭建一个实用有效的在线实时反欺诈平台?
  4. 全款房抵押贷款利息和抵押率各是多少?
  5. 基于Echarts+HTML5可视化数据大屏展示—大数据管理平台中心
  6. 49 CO配置-控制-获利能力分析-把控制范围分配给经营范围
  7. 高性能mysql 第5章 创建高可用的索引
  8. 9.6-9.7 awk
  9. Java调用百度图像识别接口
  10. 前端项目使用阿里图标
  11. K近邻算法与K均值算法的区别
  12. C++ trivial和non-trivial构造函数及POD类型
  13. 硬件加速 | 常用电路设计之PRBS伪随机码发生器的设计
  14. 工具篇-sdkman-SDK管理利器
  15. 植物大战僵尸通关进度
  16. Unity接入苹果内购(IAP)
  17. matlab 图像 whos函数,matlab图像处理常用函数
  18. 谷歌为AI再上“紧箍咒”:道德团队审查产品,确保AI不作恶
  19. Zappos:卖鞋的亚马逊
  20. win10如何开放端口

热门文章

  1. HTML中的乱码问题
  2. 16.HAL库之SPI和QSPI
  3. (一)FPGA之串口通信(UART)
  4. android 常用颜色对照表
  5. 2013云计算架构师峰会随笔
  6. 常见的Socket网络异常场景分析
  7. np.zeros函数知识大全(numpy.zeros())
  8. JVM内存区域划分Eden Space\Survivor Space\Tenured Gen\Perm Gen
  9. 跨专业考研2022.3.8
  10. nodejs的ODBC连接解决方案