输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
回溯法
也就是利用树去尝试不同的可能性,不断地去字符串数组里面拿一个字符出来拼接字符串,当字符串数组被拿空时,就把结果添加进结果数组里,然后回溯上一层。(通过往数组加回去字符以及拼接的字符串减少一个来回溯。)
function Permutation(str){
var result = []
if(str.length<=0) return result;
var sortTmp = "";
var arr = str.split("");
sortString(arr,sortTmp, result)
return result;
}
function sortString(arr,sortTmp,result){
if(arr.length ==0 ){
result.push(sortTmp);
}else{
var isRepeated = {}
for(var i = 0; i<arr.length; i++){
if(!isRepeated[arr[i]]){
var p = arr.splice(i,1)[0];
sortTmp += p;
sortString(arr,sortTmp,result);
arr.splice(i,0,p); //恢复字符串
sortTmp = sortTmp.slice(0,sortTmp.length-1);
isRepeated[p] = true;
}
}
}
}