2D阵列的所有可能排列

时间:2016-11-13 11:35:28

标签: java permute

昨天我问了一个看似重复的问题,但是,我很确定这个问题并不重复,因为这个问题有点先发制人。标题并未解释所有内容,因此请继续阅读。

让我们假设我们有一个像这样的2D数组:

{{true, false}, {true, false}, {true, false}, ...}

现在,让我们说我们想要遍历所有可能的排列:

{{false, true}, {true, false}, {true, false}, ...}
{{true, false}, {false, true}, {true, false}, ...}
{{true, false}, {true, false}, {false, true}, ...}
{{false, true}, {true, false}, {false, true}, ...}

等等......

由于这增加了它的水平,它严重混淆了我的想法。我们知道内部数组的长度总是两个,这永远不会改变。那就是:

boolean[][] b = new boolean[i][2];

使用Java来获取2D数组的所有可能排列的最佳方法是什么?

谢谢,

1 个答案:

答案 0 :(得分:1)

这显然可以通过任何其他排列发生的相同方式完成,您需要遍历您希望应用排列的列表,并递归地遍历所有可能的不同元素组合。

private void permute(List<List<Boolean>> list, int t)
{
    for(int i = 0; i < list.size(); i ++)
    {
        Collections.swap(list.get(i), 0, 1);
        permute(list, t + 1);
        Collections.swap(list.get(i), 1, 0);
    }

    if(t == list.size() - 1)
        System.out.println("Another permutation.");
}

这涵盖了所有事情,突然之间你已经找出了上述问题的所有可能组合。

现在让我们假设我们有三个布尔而不是两个以2D方式切换,突然之间的事情变得更加复杂。

亲切的问候,