字符串排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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")));