我正在尝试创建一个函数来计算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}}
如何计算所有组合?