我是Javascript的新手,我试图使用Javascript重现Java字符串排列,但我无法得到正确的结果。
注意:我在这里遵循了这个算法(Hemant的回答):String permutation with recursion
这是我的代码:
function getAllPermutations(input){
var permutations = [];
function loop(prefix, input){
var len = input.length;
if(len==0) {
permutations.push(prefix);
}
else{
for(i = 0; i < len; i++){
loop(prefix + input.charAt(i),input.substr(0,i) + input.substr(i+1,len));
}
}
}
loop("", input);
return permutations;
}
当我致电getAllPermutations("good")
时,它只返回["good"]
。这段代码发生了什么?我错过了关于回拨范围的任何内容吗?
答案 0 :(得分:0)
问题是i
循环中的变量for
是全局定义的。因此,在每次递归中,变量保留前一次迭代的值
可以通过在变量前写var
来修复它,使其成为局部变量,如下面的代码片段所示。
for(var i = 0; i < len; i++){
// ...
}