我经常看到这个问题,但它通常只涉及查找机器人可以采取的可能路径的数量。所以,问题是:有 NxN 个网格,一个机器人站在网格的顶部。在一次移动中,它只能移动到右侧或底部。
现在,我想打印出机器人可以走的所有可能路径。给定一个 NxN 矩阵,从 [0][0] 开始,它必须在 [N-1][N-1] 结束。我尝试过的是一个简单的递归解决方案:
public static void getPaths(int[][]A, int i, int j, ArrayList<Integer> path, ArrayList<ArrayList<Integer>> allPaths) {
int n = A.length;
if (i>=n || j>=n) return;
if (i==n-1 && j==n-1) {
path.add(A[i][j]);
allPaths.add(new ArrayList<Integer>(path));
return;
}
path.add(A[i][j]);
getPaths(A, i, j+1, path, allPaths);
getPaths(A, i+1, j, path, allPaths);
path.remove(path.size()-1);
}
但我不知道在哪里“重置”当前路径。
假设,给定
1 2 3
4 5 6
7 8 9
矩阵,我的解决方案将给出
[1, 2, 3, 6, 9]
[1, 2, 3, 5, 6, 9]
[1, 2, 3, 5, 6, 8, 9]
[1, 2, 3, 5, 4, 5, 6, 9]
[1, 2, 3, 5, 4, 5, 6, 8, 9]
[1, 2, 3, 5, 4, 5, 6, 7, 8, 9]