从 Java 到 Java 脚本的字符串排列
String permutation from Java to Javascript
我是 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"]
。这段代码是怎么回事?我是否遗漏了有关回调范围的任何信息?
问题是for
循环中的变量i
是全局定义的。因此在每次递归中,变量保留前一次迭代的值。
可以通过在变量前面写 var
来修复它,使其成为局部变量,如以下代码片段所示。
for(var i = 0; i < len; i++){
// ...
}
我是 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"]
。这段代码是怎么回事?我是否遗漏了有关回调范围的任何信息?
问题是for
循环中的变量i
是全局定义的。因此在每次递归中,变量保留前一次迭代的值。
可以通过在变量前面写 var
来修复它,使其成为局部变量,如以下代码片段所示。
for(var i = 0; i < len; i++){
// ...
}