0

我试图理解这个函数背后的逻辑:

 function permAlone(str) {

  arr = str.split("");

  result = [];

  perm(arr, arr.length);
  return result;

  function perm(string, length){
    if (length == 1){
      result.push(string.join(""));
    }

    else {
      for (var i=0; i < length; i++){
       perm(string, length-1);

        if(length % 2 == 0){
         swap(string, i, length-1); 
         }

        else{
         swap(string, 0, length-1);
        }
      }


    }
  }

  function swap(array, first, second){
    var temp = array[first];
    array[first] = array[second];
    array[second] = temp;
  }
}

permAlone('aab');

此函数返回传递的数组的排列。它正在工作,但我真的不明白它是如何工作的。如果结果数组只有一个推送调用,它的排列究竟如何?另外, perm 函数被调用 4 次或更少?我只是想了解这件事的逻辑。交换功能是不言自明的。我只是在 perm 函数的 else 语句中遇到了问题。

提前致谢..

4

0 回答 0