この関数の背後にあるロジックを理解しようとしています:
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');
この関数は、渡された配列の順列を返します。それは機能していますが、私はそれがどのように機能するのか本当にわかりません。プッシュ呼び出しが 1 つしかない場合、結果配列にはどのくらい正確に順列がありますか? また、perm 関数の呼び出し回数は 4 回以下ですか? このことの論理を理解したいだけです。スワップ機能は自明です。perm関数のelseステートメントに問題があります。
前もって感謝します..