为什么我的矩阵显示错误的输出?
Why is my matrix showing the wrong output?
我正在尝试使用递归查找数组 [1,2,3] 的排列。如果我直接打印出基本情况下的排列,一切都工作正常,但我想将所有排列存储在一个单独的数组中。我通过将数组推入矩阵来做到这一点,但它显示了错误的输出,即所有被推入的数组都是相同的。我无法找出错误是什么。请帮忙
let arr = [1, 2, 3];
let matrix = [];
let index = 0;
function perm(arr, index) {
if (index === arr.length) {
console.log('arr:', arr);
matrix.push(arr);
return;
}
for (let i = index; i < arr.length; i++) {
[arr[i], arr[index]] = [arr[index], arr[i]];
perm(arr, index + 1);
[arr[i], arr[index]] = [arr[index], arr[i]];
}
}
perm(arr, index);
console.log(matrix);
这是我得到的输出:
arr: [ 1, 2, 3 ]
arr: [ 1, 3, 2 ]
arr: [ 2, 1, 3 ]
arr: [ 2, 3, 1 ]
arr: [ 3, 2, 1 ]
arr: [ 3, 1, 2 ]
[
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ]
]
您将同一个数组 arr
多次推入 matrix
,因此当您稍后更新它时,它会更新 matrix
中的所有行,因为它们是对同一个数组。
尝试复制数组 arr
之前:
matrix.push(arr.slice());
我正在尝试使用递归查找数组 [1,2,3] 的排列。如果我直接打印出基本情况下的排列,一切都工作正常,但我想将所有排列存储在一个单独的数组中。我通过将数组推入矩阵来做到这一点,但它显示了错误的输出,即所有被推入的数组都是相同的。我无法找出错误是什么。请帮忙
let arr = [1, 2, 3];
let matrix = [];
let index = 0;
function perm(arr, index) {
if (index === arr.length) {
console.log('arr:', arr);
matrix.push(arr);
return;
}
for (let i = index; i < arr.length; i++) {
[arr[i], arr[index]] = [arr[index], arr[i]];
perm(arr, index + 1);
[arr[i], arr[index]] = [arr[index], arr[i]];
}
}
perm(arr, index);
console.log(matrix);
这是我得到的输出:
arr: [ 1, 2, 3 ]
arr: [ 1, 3, 2 ]
arr: [ 2, 1, 3 ]
arr: [ 2, 3, 1 ]
arr: [ 3, 2, 1 ]
arr: [ 3, 1, 2 ]
[
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ],
[ 1, 2, 3 ]
]
您将同一个数组 arr
多次推入 matrix
,因此当您稍后更新它时,它会更新 matrix
中的所有行,因为它们是对同一个数组。
尝试复制数组 arr
之前:
matrix.push(arr.slice());