排列组合算法的javascript实现
命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M)
js解法:
1 function queue(arr, size){ 2 if(size > arr.length){ return;} 3 var allResult = []; 4 5 (function(arr, size, result){ 6 if(result.length == size){ 7 allResult.push(result); 8 }else{ 9 for(var i =0 ,len = arr.length;i < len; i++){ 10 var newArr = [].concat(arr), 11 curItem = newArr.splice(i,1); 12 arguments.callee(newArr, size, [].concat(result,curItem)); 13 } 14 } 15 })(arr, size, []); 16 17 return allResult; 18 } 19 20 21 function choose(arr, size ){ 22 var allResult = []; 23 24 (function(arr, size, result){ 25 var arrLen = arr.length; 26 if(size > arrLen){ 27 return; 28 } 29 if(size == arrLen){ 30 allResult.push([].concat(result, arr)) 31 }else{ 32 for(var i =0 ; i < arrLen; i++){ 33 var newResult = [].concat(result); 34 newResult.push(arr[i]); 35 36 if(size == 1){ 37 allResult.push(newResult); 38 }else{ 39 var newArr = [].concat(arr); 40 newArr.splice(0, i + 1); 41 arguments.callee(newArr, size - 1, newResult); 42 } 43 } 44 } 45 })(arr, size, []); 46 47 return allResult; 48 } 49 50 function showResult(result){ 51 console.log('The number of result sets: ' + result.length ); 52 for(var i=0 , len = result.length;i < len; i++){ 53 console.log(result[i]); 54 } 55 } 56 57 58 var arr = ['姬光','王子', '三桂','科长']; 59 60 showResult(choose(arr, 4)); 61 showResult(queue(arr, 4));
个人原创,如有漏洞或建议,请留言。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?