我尝试编写一个函数来查找给定数字数组的所有可能排列。这是我的代码。
var perm = [];
var usedchar = [];
function findAllPermutations(arr) {
for (var i = 0; i < arr.length; i++) {
var x = arr.splice(i,1)[0];
usedchar.push(x);
if (usedchar.length == 3) {
perm.push(usedchar);
}
findAllPermutations(arr);
usedchar.pop();
arr.splice(i,0,x);
}
}
findAllPermutations([1,2,3]);
console.log(perm); //-> [[],[],[],[],[],[]]
我希望得到:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
有人可以解释为什么我没有得到这个答案吗?
最佳答案
您正在使用保存中间结果的同一个数组作为算法的存储,但事情变得困惑了。您需要将两者分开,或者确保在将 usedchar 数组插入 perm 数组之前克隆它。像这样的傻瓜:http://plnkr.co/edit/HQ6q8fo8S0K21cISQKVt
var perm = [];
var usedchar = [];
var another = [];
function findAllPermutations(arr) {
for (var i = 0; i < arr.length; i++) {
var x = arr.splice(i,1)[0];
usedchar.push(x);
if (usedchar.length == 3) {
perm.push(usedchar.slice());
};
findAllPermutations(arr);
usedchar.pop();
arr.splice(i,0,x);
};
};
findAllPermutations([1,2,3]);
console.log(perm);
关于javascript - 为什么我的变量引用全局范围变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194211/