排列组合算法的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));
复制代码

 

 

个人原创,如有漏洞或建议,请留言。

 

 

posted @   猫哥_kaiye  阅读(5167)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示