令人烦恼的是,这个问题很简单,但今天却让我有点头疼。 (对伪代码表示歉意)
假设我们有两个 boolean 数组列表,a
和b
其中:
a = [true, true, false]
b = [true, false, true]
我正在尝试生成 a
之间比较的所有组合的列表和b
遵循以下规则:
- 如果
a[i] = true
和b[i] = true
由此产生的result[i]
应该总是返回true
. - 如果
a[i] = false
和b[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/