共鸣

导航

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

 

 

 

因为同事的一个问题,花了好几个小时研究,在这里记录一下成果。

posted on 2022-08-08 10:34  共鸣  阅读(91)  评论(0编辑  收藏  举报