-4

昨天我问了一个似乎重复的问题,这个问题,但是,我很确定不是重复的,因为这个问题稍微高级一点。标题并没有解释所有内容,所以请继续阅读。

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

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

谢谢,

4

1 回答 1

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 方式切换,突然之间事情变得稍微复杂了。

亲切的问候,

于 2016-11-13T13:52:29.597 回答