我坚持使用一些堆的排列算法。我编写了一些 JavaScript 代码以递归方式查找值的所有可能排列:数组或字符串。当我置换值时,我的代码似乎可以完美运行,console.log()
但是当我将它们推送到另一个数组时,我得到的所有值都相同。我很困惑。
我的代码包含两个独立的函数:一个是交换元素,另一个是递归查找可能的排列:
arr = ["a", "b", "c"];
newArr = [];
// swap mechanism here
function swap(arr, pos1, pos2) {
var temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
};
function perm(arr, nArr, n) {
n = n || arr.length;
if (n === 1) {
console.log(arr); // console.log() works great
newArr.push(arr); // pushing the permuted values does not
}
else {
for(var i = 1; i <= n; i += 1) {
perm(arr, nArr, n - 1);
if (n % 2) {
var j = 1;
}
else {
var j = i;
}
swap(arr, j - 1, n - 1);
}
}
};