なぜ私のコードがすべての順列を2回押しているのか混乱しています。助けてください。私は、ヒープのアルゴリズムを使用しています:私のコードがすべての順列を2回押すのはなぜですか?
var regex = /(.)\1+/g;
function permAlone(str) {
var newArray = str.split('');
var n = newArray.length;
var permutations = [];
var tmp;
function swap(index1, index2) {
tmp = newArray[index1];
newArray[index1] = newArray[index2];
newArray[index2] = tmp;
}
function generate(n, newArray) {
if (n === 1) {
permutations.push(newArray.join(''));
} else {
for(var i = 0; i<n-1; i++) {
generate(n-1, newArray);
swap(n % 2 ? 0 : i, n-1);
permutations.push(newArray.join(''));
}
generate(n-1, newArray);
}
}
generate(n, newArray);
return permutations;
}
permAlone('aab');
返される配列は次のとおりです。
["aab", "aab", "aab", "baa", "baa", "aba", "aba", "aba", "baa", "baa"]
あなたが見ることができるように、順列は各事を意図したよりも多くの回登場しています。すべてのヘルプは
重複に加えて、 'generate(n-1、newArray);'の2番目の呼び出しは不要です。これはループの最後の最後の繰り返しと同じことを行うだけです。 – samgak
文字列が 'aab'なので、2つの' aab'と2つの 'aba'(2つの' a'があるので)またはただ1つを期待していますか? –
...なぜ正規表現..? – Redu