我正在尝试编写代码来创建字符串的排列。这是我的代码:
function perm(str){
function addNew(arr,char){
var result =[];
for(i=0;i<=arr.length;i++){
var temp =[...arr];
temp.splice(i,0,char);
result.push(temp);
}
return result;
}
var chars =str.split("");
var results =[[]];
for(i=0;i<chars.length;i++){
var temp =[...results];
results =[];
for(j=0;j<temp.length;j++){
results =[...results,...addNew(temp[j],chars[i])];
}
}
return results;
}
perm("abcd")
返回:
[ [ 'd', 'c', 'a' ],
[ 'c', 'd', 'a' ],
[ 'c', 'a', 'd' ],
[ 'd', 'a', 'c' ],
[ 'a', 'd', 'c' ],
[ 'a', 'c', 'd' ] ]
perm(acde)返回:
[ [ 'e', 'd', 'a' ],
[ 'd', 'e', 'a' ],
[ 'd', 'a', 'e' ],
[ 'e', 'a', 'd' ],
[ 'a', 'e', 'd' ],
[ 'a', 'd', 'e' ] ]
所以,基本上循环跳过(仅)字符串中的第二个字符。有人可以解释原因吗?
P.S。我知道算法对于这个问题效率很低,但我只是从编码开始,而且还要完全理解Heap的算法。 我对这种行为非常好奇,如果有人解释,我会非常感激。