从Java到Javascript的字符串排列

String permutation from Java to Javascript

本文关键字:字符串 排列 Javascript Java      更新时间:2023-09-26

我是Javascript的新手,我试图使用Javascript重现Java字符串排列,但我无法得到正确的结果。

注意:我在这里遵循这个算法(Hemant的答案):字符串排列与递归

下面是我的代码:
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++){
// ...
}