通过递归遍历布尔数组的所有可能性

如果我们有一个由4个布尔值组成的数组,那么生成所有可能值的最佳方法是什么?

我想找到一个解决方案,以正确的顺序生成从0“ False”到4“ False”的所有可能性(首先所有可能性为0“ False”,然后所有可能性为1“ False”,然后用2个“ False”等所有可能性,等等):

  • T T T T T
  • F T T T T
  • T F T T
  • T T F T
  • T T T F
  • F F T T
  • F T F T
  • ...
  • F F F F

我正在尝试递归操作,但是我缺少了一些东西。

clOUdland619 回答:通过递归遍历布尔数组的所有可能性

好的,想象一个方法:

void addPossible(ArrayList<String> array,String prefix,int numberOfSlots,int numberFalse) {
}

想象一下此方法被称为addPossible(array,“ TTT”,1,0)。在这种情况下,您知道可以有1个正确选择,没有错误选择,因此您可以在数组中仅添加一个值,即前缀+“ T”,或者在这种情况下为“ TTTT”并返回。

现在,多次调用此方法:

for (int index = 0; index < 4; ++index) {
    addPossible(array,"",4,index);
}

换句话说,我们称其为4个插槽,一次为0,然后为1,以此类推。

在方法内部,您将再次调用该方法两次。我不会向您展示所有代码,但是调用将是:

addPossible(array,prefix + "T",numberOfSlots-1,numberFalse);
addPossible(array,prefix + "F",numberFalse-1);

第一种情况是因为我们要添加一个T,所以我们仍然需要所有的错误。第二种情况是因为我们要添加一个F,所以我们需要少一个false。无论哪种情况,我们都已添加到字符串中,因此剩余的插槽数较小。

还有更多要编写的代码。您实际上并没有将任何内容推入向量,也没有完成逻辑。

但是也许您知道这是如何实现的。

,

您可以使用最多2 4 的数字以及相应计数器的位。 该顺序有些棘手,原则上您可以使用BitSet来保存布尔值:

for (int i = 0; i < 1 << 4; ++i) {
    BitSet bits = BitSet.valueOf(new long[] { (long)i);
    for (int j = 0; j < 4; ++j) {
        if (bits.get(j)) {
        }
    }
}

顺序似乎是i从15下降到0,j从3下降到0。

,
   public static void main(String[] args) {
   final int n = 4;
    for (int i = 0; i < Math.pow(2,n); i++) {
        String binary = Integer.toBinaryString(i);
        while (binary.length() < n)
            binary= "0" + binary;
        System.out.println(binary);
    }
   }

输出将是这样

  

0000   0001   0010   0011   0100   0101   0110   0111   1000   1001   1010   1011   1100   1101   1110   1111

您可以将“ 0”视为“ F”,将“ 1”视为“ T”

,

最直接的方法是将这些值简单地转换为二进制字符串,在左侧填充缺失的“ 0”字符,然后进行一对一替换。

      for (int v : n) {
         String s = "000" + Integer.toBinaryString(v);
         s = s.substring(s.length() - 4,s.length()).replace("1","T ").replace(
               "0","F ");
         System.out.println(s);
      }

本文链接:https://www.f2er.com/3165464.html

大家都在问