二维数组的所有可能排列

All possible permutations of 2D array

昨天我问了一个看起来重复的问题,但是我很确定这个问题不是重复的,因为这个问题稍微高级一点。标题没有解释全部,请继续阅读。

让我们假设我们有一个像这样的二维数组:

{{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 实现二维数组所有可能排列的最佳方法是什么?

谢谢,

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

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.");
}

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

现在让我们假设我们有三个布尔值而不是两个以二维方式切换,突然间事情变得稍微复杂一些。

亲切的问候,