获得数组中所有排列结果(语言使用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);

因为同事的一个问题,花了好几个小时研究,在这里记录一下成果。
浙公网安备 33010602011771号