2016-11-13 122 views
-3

昨天我问了一个似乎是重复的问题,但是,我确定它不是重复的,因为这个问题比一个更先进一点。标题没有解释全部,所以请继续阅读。二维数组的所有可能的排列组合

让我们假装我们有一个二维数组,像这样:

{{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]; 

什么是accheive一个二维数组的所有可能的排列的最好方式,使用Java?

谢谢

+0

通过排列组合,你的意思是有多少种方法是二维阵列,或者选择一个从第一列,一个在路数中选择一组对布尔值的有第二? –

+0

以各种可能的方式选择错误,真实的所有可能方式。例如,第一对和第二对都可能是假的,是真的。或者全部三首。或者第一,第二和第四,等等。 –

+0

好吧,从理论上讲,真值和假值有四种排列组合形成一对。如果您正在尝试查找数组中的每个排列有多少次,那么您必须专门计算数组中发生的次数(true,true)。这不完全是一个排列。 –

回答

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

亲切的问候,