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

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

原文地址:https://www.cnblogs.com/kaiye/p/3606373.html