Ull*_*lli 1 javascript arrays permutation
我有不同的数组,都带有数字,但是元素数量不同:
var ar1 = [2, 5];
var ar2 = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
我需要获取每个数组的所有排列。输出元素的长度应始终与输入数组相同。
此结果应该是一个数组数组,如下所示:
对于ar1:
[2, 5]
[5, 2]
Run Code Online (Sandbox Code Playgroud)
对于ar2:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
Run Code Online (Sandbox Code Playgroud)
我不想要笛卡尔积,每个数组都应该自己处理。
到目前为止,我发现的所有解决方案都仅创建与顺序无关的数组,因此ar1的结果仅是一个数组,而不是两个。
解决方案应适用于输入数组中任意数量的元素。我们可以假设输入数组中没有重复的值。
您可以使用一种迭代和递归的方法进行排列,直到没有更多的元素可以分配为止。
function permutation(array) {
function p(array, temp) {
var i, x;
if (!array.length) {
result.push(temp);
}
for (i = 0; i < array.length; i++) {
x = array.splice(i, 1)[0];
p(array, temp.concat(x));
array.splice(i, 0, x);
}
}
var result = [];
p(array, []);
return result;
}
console.log('something bigger [1,2,3,4,5,6,7]');
console.time('t1');
permutation([1, 2, 3, 4, 5, 6, 7]);
console.timeEnd('t1');
console.log(permutation([2, 5]));
console.log(permutation([1, 2, 3]));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |