获得数组中所有排列结果(语言使用js)
var arr = ['a', 'b', 'c']; //计算排列的数组 var res = []; //保存结果的数组 //设置值,带去重 function setval(val) { if (!res.includes(val)) { res.push(val); } } //累乘计算 function factorial(n){ if(n <= 1) return 1; return n*factorial(n-1) } //指定索引指的位置和第一个元素的位置调换 function ATN(tarr,index){ var tmp = tarr[0]; tarr[0] = tarr[index]; tarr[index] = tmp; return tarr; } //所有排列数量计算 function getCount(len){ var num = 0; for(var i=1;i<=len;i++){ num+=factorial(len)/factorial(len-i); } return num; } //递归获得所有排列 function getData(tarr,tval){ for(var i=0;i<tarr.length;i++){ var tarr2 = ATN(tarr,i); var tval2 = tval; for(var j=0;j<tarr2.length;j++){ tval2 += tarr2[j]; setval(tval2); //设置逐字符累加的值 //去掉数组中的一个元素继续向下循环 getData(tarr2.slice(j+1),tval2); } } } //打印排列数量 console.log(getCount(arr.length)); //计算排列结果 getData(arr,''); //打印排列结果 console.log(res);
因为同事的一个问题,花了好几个小时研究,在这里记录一下成果。