java - boolean 数组的所有组合

标签 java

令人烦恼的是,这个问题很简单,但今天却让我有点头疼。 (对伪代码表示歉意)

假设我们有两个 boolean 数组列表,ab其中:

a = [true, true, false]

b = [true, false, true]

我正在尝试生成 a 之间比较的所有组合的列表和b遵循以下规则:

  • 如果a[i] = trueb[i] = true由此产生的result[i]应该总是返回true .
  • 如果a[i] = falseb[i] = false 总是返回false .
  • 如果a[i] != b[i]返回其中 result[i] 的列表是 true其中之一是 false .

所以 compare(a,b) 的预期结果将会是(我希望...):

[true, true, false],
[true, false, false],
[true, true, true],
[true, false, true]

我尝试在 Java 中执行此操作,但似乎无法正确迭代,有人可以给我一些帮助吗?

编辑:

规则 3 的另一个简单示例:

a = [true, false]
b = [false, true]

results:

[true, false]
[false, true]
[true, true]
[false, false]

基本上这就是我的意思:)

最佳答案

递归是解决此类组合问题的经典方法。

void resursivelyCombine(List<List<Boolean>> result, List<Boolean> current, List<Boolean> in1, List<Boolean> in2, int index) {
    if (index == in1.size()) {
        result.add(current);
    } else {
        if (in1.get(index).equals(in2.get(index))) {
           current.add(in1.get(index));
           recursivelyCombine(result, current, in1, in2, index+1);
        } else {
           List<Boolean> temp = new ArrayList<>(current);
           temp.add(Boolean.TRUE);
           recursivelyCombine(result, temp, in1, in2, index+1);

           temp = new ArrayList<>(current);
           temp.add(Boolean.FALSE);
           recursivelyCombine(result, temp, in1, in2, index+1);
        }
    }
}

类似的东西:)代码可能需要一些整理,因为我刚刚在此处输入了未经测试的代码。

这样调用它:

 List<List<Boolean>> results = new ArrayList<>();
 recursivelyCombine(results, new ArrayList<Boolean>(), in1, in2, 0);

关于java - boolean 数组的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932053/

相关文章:

java - 有关 Java 对象方法的信息保存在哪里?

java - 如何将 System.setProperty 的范围限制为仅设置它的方法?

java - Gradle库具有不同的版本

javascript - 在 Java 中使用 EXSLT 验证 XML?

java - Int 不能取消引用。我该如何解决?

java - 如何通过数组列表中的元素之一查找对象并打印它?

java - 在运行的 servlet 中从 Eclipse 修改 Java 类?

java - ArrayList排序最长序列

java - 将 HTML 输入日期映射到 Java 对象的 LocalDate

java - Cobertura 2.0.3 - 无法检测