在Java中,如何生成NxM布尔数组的所有可能组合?

我正在尝试创建一个函数来计算2D NxM数组的所有可能的NxM组合。它将能够接受介于1和N之间的任意两个整数(包括1和N)(因此,应该可以对1x1、2x2、1x2、2x1 ... ... NxM执行此操作)。我一直在尝试不同的解决方案,但似乎无法全部计算出来。这是我到目前为止的内容:

    private static void computeGrid(int[][] B) {
        computeGrid(B,0,0);
    }

    private static void computeGrid(int[][] B, int x, int y) {
        print(B);
        int[][] B0x = copy2DArray(B);
        int[][] B0y = copy2DArray(B);
        int[][] B1x = copy2DArray(B);
        int[][] B1y = copy2DArray(B);
        if(x+1 < B0x.length) {
            B0x[x][y] = 0;
            computeGrid(B0x, x+1,y);
        }
        if(y+1 < B0y[0].length) {
            B0y[x][y] = 0;
            computeGrid(B0y, x, y+1);
        }
        if(x+1 < B1x.length) {
            B1x[x][y] = 1;
            computeGrid(B1x, x+1, y);
        }
        if(y+1 < B1y[0].length) {
            B1y[x][y] = 1;
            computeGrid(B1y, x, y+1);
        }
    }

例如,如果有一个2x2数组(表示该整数的整数),则期望以下结果:

{{0,0},{0,0}}, {{0,0},{0,1}}, {{0,0},{1,0}}, {{0,0},{1,1}}, 
{{0,1},{0,0}}, {{0,1},{0,1}}, {{0,1},{1,0}}, {{0,1},{1,1}}, 
{{1,0},{0,0}}, {{1,0},{0,1}}, {{1,0},{1,0}}, {{1,0},{1,1}}, 
{{1,1},{0,0}}, {{1,1},{0,1}}, {{1,1},{1,0}}, {{1,1},{1,1}}

但是,我得到的是:

{{0,0},{0,0}},
{{0,0},{1,0}},
{{0,1},{0,0}},
{{1,0},{0,0}},
{{1,0},{1,0}},
{{1,1},{0,0}}

如何计算所有组合?

评论