【发布时间】:2020-05-17 05:22:02
【问题描述】:
我正在尝试创建一个函数来计算 2D NxM 数组的所有可能的 NxM 组合。它将能够接受介于 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}}
如何计算所有组合?
【问题讨论】:
-
你仅限于 c 风格的数组吗?
-
N总是大于等于M吗?
-
@NomadMaker "1x1, 2x2, 1x2, 2x1, ... NxM 应该是可能的"
标签: java arrays 2d combinations