2016-09-17 52 views
0

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

注:我跟着这个算法在这里(与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

问题是全局定义了for循环中的变量i。因此,在每次递归中,变量保留前一次迭代的值。
可以通过在变量前写入var来修复它,使其成为局部变量,如下面的代码片段所示。

for(var i = 0; i < len; i++){ 
// ... 
}