for Javascript跳过特定索引

时间:2018-01-17 14:50:09

标签: javascript arrays for-loop

我正在尝试编写代码来创建字符串的排列。这是我的代码:

function perm(str){
function addNew(arr,char){
    var result =[];
    for(i=0;i<=arr.length;i++){
      var temp =[...arr];
      temp.splice(i,0,char);
      result.push(temp);
    }
    return result;
  }

  var chars =str.split("");
  var results =[[]];
  for(i=0;i<chars.length;i++){
   var temp =[...results];
   results =[];
   for(j=0;j<temp.length;j++){
     results =[...results,...addNew(temp[j],chars[i])];
   } 

  }

  return results;
}  

perm("abcd")

返回:

[ [ 'd', 'c', 'a' ],
  [ 'c', 'd', 'a' ],
  [ 'c', 'a', 'd' ],
  [ 'd', 'a', 'c' ],
  [ 'a', 'd', 'c' ],
  [ 'a', 'c', 'd' ] ]

perm(acde)返回:

[ [ 'e', 'd', 'a' ],
  [ 'd', 'e', 'a' ],
  [ 'd', 'a', 'e' ],
  [ 'e', 'a', 'd' ],
  [ 'a', 'e', 'd' ],
  [ 'a', 'd', 'e' ] ]

所以,基本上循环跳过(仅)字符串中的第二个字符。有人可以解释原因吗?

P.S。我知道算法对于这个问题效率很低,但我只是从编码开始,而且还要完全理解Heap的算法。 我对这种行为非常好奇,如果有人解释,我会非常感激。

0 个答案:

没有答案
相关问题