生成所有大小为n的二进制字符串到布尔数组的最快方法?

sno*_*yak 9 java binary boolean

例如,如果我想要所有长度为3的二进制字符串,我可以简单地将它们声明为:

boolean[] str1 = {0,0,0};
boolean[] str2 = {0,0,1};
boolean[] str3 = {0,1,0};
boolean[] str4 = {0,1,1};
boolean[] str5 = {1,0,0};
boolean[] str6 = {1,0,1};
boolean[] str7 = {1,1,0};
boolean[] str8 = {1,1,1};
Run Code Online (Sandbox Code Playgroud)

将所有可能的长度为N的二进制字符串生成到布尔数组中的最有效方法是什么?

我不一定需要最有效的方法,只有一个那是相当有效的,并容易让我多线程.

编辑:我应该注意,如果重要的话,我将把它们全部存储在ArrayList中.

Laz*_*key 6

这里有一些生成真值表的代码...(由于数组大小限制,只适用于32位(如果需要,可以将大小变量更改为任何值并将布尔值存储为1/0):

int size = 3;
    int numRows = (int)Math.pow(2, size);
    boolean[][] bools = new boolean[numRows][size];
    for(int i = 0;i<bools.length;i++)
    {
        for(int j = 0; j < bools[i].length; j++)
        {
            int val = bools.length * j + i;
            int ret = (1 & (val >>> j));
            bools[i][j] = ret != 0;
            System.out.print(bools[i][j] + "\t");
        }
        System.out.println();
    }
Run Code Online (Sandbox Code Playgroud)