我试图通过在数组的开头而不是最后一个固定元素来以相反的方式使用堆算法。但我无法得到结果。虽然我理解了这个算法的理论部分,但当我尝试实现它时却很困惑。我主要对 if 条件中的交换语句感到困惑。(请检查评论)。如果有人能说出问题所在,那将很有帮助。谢谢你的时间。
function permute(string){
var str = string.split(""), strbrr = [];
function swap(strbrr,index1,index2) {
var temp = strbrr[index1];
strbrr[index1] = strbrr[index2];
strbrr[index2] = temp;
}
function permuteHelper(strarr, curr, end) {
if (curr == end)
console.log(strarr);
else{
var fixed = strarr[curr];
for(i=curr; i<=end; i++) {
permuteHelper(strarr,curr+1,end);
(end+1)%2 ? swap(strarr,end,curr) : swap(strarr,i,end); //This is the most confusing part for me. What is the code here?
}
}
}
permuteHelper(str,0,str.length-1);
}
var string1 = "ABCD";
permute(string1);