JavaScriptでヒープの非再帰アルゴリズムを実装しました。 console.log(arr)
で順列をチェックすると、すべて正常に動作します。 しかし、各順列を結果配列にプッシュしようとすると、すべてが壊れてしまいます。最後の反復置換で満たされた結果を返します。 Javascriptヒープのアルゴリズム(非再帰的)
function generate(n, arr) {
\t function swap(item1, item2){
\t \t console.log(item1, item2);
\t \t let tmp = arr[item1];
\t \t arr[item1] = arr[item2];
\t \t arr[item2] = tmp;
\t }
\t var c = [];
\t var allPermutations = [];
\t
\t for (let i = 0; i < n; i++) {
\t \t c[i] = 0;
\t }
\t
\t console.log(arr);
\t allPermutations.push(arr);
\t
\t for (let i = 1; i < n; i) {
\t \t if (c[i] < i) {
\t \t \t if (i % 2 == 0) {
\t \t \t \t swap(0, i);
\t \t \t } else {
\t \t \t \t swap(c[i], i);
\t \t \t }
\t \t \t
\t \t \t console.log(arr);
\t \t \t allPermutations.push(arr);
\t \t \t
\t \t \t c[i] += 1;
\t \t \t i = 1;
\t \t } else {
\t \t \t c[i] = 0;
\t \t \t i += 1;
\t \t }
\t }
\t
\t return allPermutations;
}
console.log('result', generate(3, ["a", "a", "b"]));
[ask]を読んで投稿を修正する必要があります。 – Amit
あなたはコードをカットして貼り付けることはできません。 –
@EdHealはreplよりも静的な出力です... –