我已经在 JavaScript 中实现了 Heap 的非递归算法。当检查排列时,console.log(arr)
一切都按预期工作。但是当我尝试将每个排列推送到结果数组时,一切都会崩溃。它只返回填充了最后一次迭代排列的结果。
function generate(n, arr) {
function swap(item1, item2){
console.log(item1, item2);
let tmp = arr[item1];
arr[item1] = arr[item2];
arr[item2] = tmp;
}
var c = [];
var allPermutations = [];
for (let i = 0; i < n; i++) {
c[i] = 0;
}
console.log(arr);
allPermutations.push(arr);
for (let i = 1; i < n; i) {
if (c[i] < i) {
if (i % 2 == 0) {
swap(0, i);
} else {
swap(c[i], i);
}
console.log(arr);
allPermutations.push(arr);
c[i] += 1;
i = 1;
} else {
c[i] = 0;
i += 1;
}
}
return allPermutations;
}
console.log('result', generate(3, ["a", "a", "b"]));