如果我具有以下多维数组(具有任意大小):
a,b,c
d,e,f
g,h,i
我想找到所有可能的垂直遍历(adg,adh,aeh,aeg,aei,bdg等),我将如何在Java中做到这一点?
让我感到困难的是,该数组具有任意正方形大小(您不知道它是2x2
还是3x3
或4x4
),因此,您不能仅将N
嵌套到loops
,其中N = length of multidimensional array
。任何帮助都会很棒!
编辑:我将垂直遍历定义为上下移动,直接向下移动以及右移
答案 0 :(得分:3)
有很多方法可以解决此问题,但也许您可以使用递归depth-first search。
尝试:
public static void main(String[] args) {
int size = 3;
String arr[][] = {
{"a", "b", "c"},
{"d", "e", "f"},
{"g", "h", "i"}
};
for (int i = 0; i < size; i++) {
dfs(arr, 0, i, size, arr[0][i]);
}
}
static void dfs(String[][] arr, int y, int x, int size, String curr) {
if (y == size - 1) {
System.out.println(curr);
} else {
if (x > 0) {
dfs(arr, y + 1, x - 1, size, curr + arr[y + 1][x - 1]);
}
dfs(arr, y + 1 , x, size, curr + arr[y + 1][x]);
if (x < size - 1) {
dfs(arr, y + 1, x + 1, size, curr + arr[y + 1][x + 1]);
}
}
}
dfs
将y
和x
移动到严格位于当前单元格下方的相邻单元格中,并将其内容保存到curr
。如果dfs
遍历底部,它将打印curr
。
输出:
adg
adh
aeg
aeh
aei
bdg
bdh
beg
beh
bei
bfh
bfi
ceg
ceh
cei
cfh
cfi