字符串排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

第一种方法:字符串拼接

function permutate(str) {
    var result=[];
    if(str.length==1){
        return [str]    
    }else{  
        var preResult=permutate(str.slice(1));
        for (var j = 0; j < preResult.length; j++) {
            for (var k = 0; k < preResult[j].length+1; k++) {
                var temp=preResult[j].slice(0,k)+str[0]+preResult[j].slice(k);   
                result.push(temp);              
            }
        }
        return result;
    }  
}
console.log(permutate("abc"));

第二种方法:递归

function permutation(str){
    let result = [];
    if(str.length === 1){
        return [str];
    }else{
        let last = permutation(str.slice(1));
        for(let i=0; i<last.length;i++){
            let ss = swap(str[0],last[i],result);
            result=ss;
        }
        return result;
    }
}
function swap(a,b,result){
    for(let i=0;i<b.length+1;i++){
        let newStr = b;
        let sss = newStr.split('');
        sss.splice(i,0,a); 
        result.push(sss.join(''))      
    }
    return result;
}

let res = permutation('abc');
console.log(res);

对于有重复的字符串来说按照上述算法输出出来会有重复的组合,简单的方法就是加一句Array.from(new Set(permutate("abc")));

posted @ 2019-08-01 15:57  tomatoa  阅读(161)  评论(0编辑  收藏  举报