命题:从成员数为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));
个人原创,如有漏洞或建议,请留言。