【问题标题】:All possible permutations of 2D array二维数组的所有可能排列
【发布时间】:2017-03-27 04:21:07
【问题描述】:

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

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

{{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 种排列形成一对。如果您试图找出四种排列中的每一种在您的数组中出现的次数,那么您必须专门计算数组中出现的次数 (true,true)。这不完全是一个排列。
  • 我认为没有理由假设二维会增加这个问题的任何复杂性。这与“查找 1D 数组的排列”问题没有什么不同。碰巧一维数组的内容也是数组,但这是否意味着内容本身必须经历额外的排列。
  • { false, true }{ true, false } 唯一可能的配对,还是{ false, false }{ true, true }

标签: java permute


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

亲切的问候,

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多