signed

QiShunwang

“诚信为本、客户至上”

JS全排列的几种算法

2020/8/19 23:50:57   来源:

这几天遇到一个问题。
问题描述:给定一个字符串,输出该字符串所有排列的可能。如输入“abc”,输出“abc,acb,bca,bac,cab,cba”
我们 都知道3个数字全排列一共有321种方法,那么怎么实现呢?

方法一(递归)

    var a=[a,b,c];
    //swap用来交换数组a中的两个元素
    function swap(a,p,q){
        var t=a[p];
        a[p]=a[q];
        a[q]=t;
    }//全排列函数pai,在数组a中,对p位置到q位置之间的元素进行全排列
    function pai( a, p, q){
        if(p==q){
            document.write(a+"<br />");
        }//一个数的全排列就是自己,输出自己
        else{
            for(let i=p; i<q; i++){
                swap(a,i,p);//把 a 中的每个元素都作一次头元素
                pai(a,p+1,q);//对头元素后的数据再次递归实现全排列
                swap(a,i,p);//排完之后要换回来,防止重复排列
            }
        }
    }
    pai(a,0,a.length);