Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归遍历布尔数组的所有可能性_Java_Algorithm_Recursion - Fatal编程技术网

Java 使用递归遍历布尔数组的所有可能性

Java 使用递归遍历布尔数组的所有可能性,java,algorithm,recursion,Java,Algorithm,Recursion,如果我们有一个由4个布尔值组成的数组,那么生成所有可能值的最佳方法是什么 我想找到一个解决方案,以正确的顺序生成从0“False”到4“False”的所有可能性(首先是0“False”的所有可能性,然后是1“False”的所有可能性,然后是2“False”的所有可能性,等等): T T T T F T T T F T T T F T T T F F F T F T F T F F F F 我试图用递归实现它,但我遗漏了一些东西。好的,想象一个方法: void addPossible(Arr

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

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

  • T T T T
  • F T T
  • T F T
  • T T F T
  • T T F
  • F F T
  • F T F T
  • F F F F

我试图用递归实现它,但我遗漏了一些东西。

好的,想象一个方法:

void addPossible(ArrayList<String> array, String prefix, int numberOfSlots, int numberFalse) {
}
第一种情况是,因为我们加了一个T,所以我们仍然需要所有的假象。第二种情况,是因为我们加了一个F,所以我们需要少一个false。在这两种情况下,我们都已添加到字符串中,因此剩余的插槽数更小

还有更多的代码要写。实际上你没有把任何东西推到向量上,你也没有做逻辑


但也许你可以看到它是如何工作的。

你可以使用最多24个数字,以及相应计数器的位。 顺序有点复杂,原则上可以使用位集来保存布尔值:

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)) {
        }
    }
}
for(int i=0;i<1
publicstaticvoidmain(String[]args){
最终整数n=4;
for(int i=0;i
输出将如下所示

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


你可以把“0”作为“f”和“1”作为“t′/p>< p>最简单的方法是简单地将值转换成二进制字符串,在左边加上缺少“0”字符,然后做一对一替换。< /P>

for(int v:n){
字符串s=“000”+整数。toBinaryString(v);
s=s.子字符串(s.长度()-4,s.长度())。替换(“1”,“T”)。替换(
“0”、“F”);
系统输出打印项次;
}

到目前为止,您尝试了什么?请展示您的代码。从二进制角度思考。您是否需要递归?或者您的意思是您尝试了它,但无法使其工作,但for循环就可以了?如果您在浏览器中搜索“生成所有二进制序列递归”,你会找到比我们在这里能解释得更好的参考资料。我认为这与问题中的顺序不一样。他说需要顺序相同
addPossible(array, prefix + "T", numberOfSlots-1, numberFalse);
addPossible(array, prefix + "F", numberOfSlots-1, numberFalse-1);
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)) {
        }
    }
}
   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);
    }
   }