JavaScript - 生成数组的所有排列

标签 javascript arrays permutation

这个问题在这里已经有了答案:





Permutations in JavaScript?

(37 个回答)


5年前关闭。




我有不同的数组,所有数组都有数字,但元素数量不同:

var ar1 = [2, 5];
var ar2 = [1, 2, 3];

我需要获取每个数组的所有排列。输出元素的长度应始终与输入数组相同。

这个结果应该是一个数组数组,如下所示:

对于 ar1:
[2, 5]
[5, 2]

对于 ar2:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

我不想要笛卡尔积,每个数组都应该单独处理。

到目前为止,我发现的所有解决方案都只创建与顺序无关的数组,因此 ar1 的结果只是一个数组而不是两个。

该解决方案应该适用于输入数组中的任意数量的元素。我们可以假设输入数组中没有重复的值。

最佳答案

您可以使用 permutation一种迭代和递归的方法,直到没有更多的元素被分配。

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]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于JavaScript - 生成数组的所有排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654895/

相关文章:

php - 使用 foreach 循环更改多个字段中的嵌套数组值

javascript - 字符串置换函数无法正常工作

python - 获取排列中删除字符的字符串列表

C++ 错误 : Undefined symbols for architecture x86_64

javascript - jquery.mobile 1.4.5 未捕获类型错误 : Cannot read property 'concat' of undefined

javascript - 图像在使用 JavaScript 更改后没有相同的 CSS 属性

javascript - 根据比较值更改文本颜色 (Javascript/CSS)

javascript - 热衷于使用 lodash 展平对象的嵌套数组?

java - 空指针异常/数组

arrays - Node : How to store JSON Array in google datastore