java - 在 NxN 网格中查找所有路径的算法

标签 java algorithm

想象一个机器人坐在 NxN 网格的左上角。机器人只能在两个方向上移动:向右和向下。机器人有多少条可能的路径?

我可以在谷歌上找到这个问题的解决方案,但我对解释不是很清楚。我试图清楚地理解如何解决这个问题并在 Java 中实现的逻辑。任何帮助表示赞赏。

更新:这是一个面试问题。目前,我正在尝试到达右下端并打印可能的路径。

最佳答案

public static int computePaths(int n){
    return recursive(n, 1, 1);      
}   

public static int recursive(int n, int i, int j){
    if( i == n || j == n){
        //reach either border, only one path
        return 1;
    }
    return recursive(n, i + 1, j) + recursive(n, i, j + 1);
}

查找所有可能的路径:
仍然使用递归方法。路径变量在开头分配“”,然后将访问的每个点添加到“路径”。到达 (n,n) 点时形成一条可能的路径,然后将其添加到列表中。

每条路径用字符串表示,如“(1,1)(2,1)(3,1)(4,1)(4,2)(4,3)(4,4)”。所有可能的路径都存储在字符串列表中。

public static List<String> robotPaths(int n){
    List<String> pathList = new ArrayList<String>();
    getPaths(n, 1,1, "", pathList);
    return pathList;
}
public static void getPaths(int n, int i, int j, String path, List<String> pathList){
    path += String.format(" (%d,%d)", i , j);
    if( i ==n && j == n){ //reach the (n,n) point
        pathList.add(path);
    }else if( i > n || j > n){//wrong way
        return;
    }else {
        getPaths(n, i +1, j , path, pathList);
        getPaths(n, i , j +1, path, pathList);
    }
}

关于java - 在 NxN 网格中查找所有路径的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105699/

相关文章:

java - 可以在 Fortran、C 或 Java 中重新定义像 sin() 这样的函数吗?

java - 以编程方式确定 Java session 超时

python - 从方阵组成边

algorithm - 在网格中查找从单元格 x 到单元格 y 的路径,以便所有单元格都被解析一次

c++ - 找出平均值大于或等于 K 的子数组的数量

python - 使用多段三次贝塞尔曲线和距离以及曲率约束逼近数据

algorithm - 快速嵌套在矩阵中绘制圆

java - 为什么我的代码退出并且不接受扫描仪拉入的 "yes"或硬编码的代码?

java - 调整标签图标大小

java - 线程完成时更改布局