
思路:
首先我们可以使用暴力递归解法,无非就是每次向下或者向右看看是否有解法,代码如下:
public class Solution {
    public int uniquePaths(int m, int n) {
        return findPaths(0, 0, m, n);
    }
    private int findPaths(int i, int j, int m, int n) {
        // 如果越界,返回0
        if (i >= m || j >= n) {
            return 0;
        }
        // 当到达右下角时,返回1
        if (i == m - 1 && j == n - 1) {
            return 1;
        }
        // 否则,路径数是从下方和右方到达当前位置的路径数之和
        return findPaths(i + 1, j, m, n) + findPaths(i, j + 1, m, n);
    }
}
然后根据这个递归来解动态规划
代码如下:
public class Solution {
    public int uniquePaths(int m, int n) {
        // 初始化dp表,所有值默认为0
        int[][] dp = new int[m][n];
        // 初始化第一行和第一列的所有位置
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int j = 0; j < n; j++) {
            dp[0][j] = 1;
        }
        // 填充dp表的其余部分
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        // 返回到达右下角的路径数量
        return dp[m - 1][n - 1];
    }
}


![[Linux][网络][TCP][四][流量控制][拥塞控制]详细讲解](https://img-blog.csdnimg.cn/direct/dce077804ba54774a5dfd6fc7e604780.png)







![[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析(2)](https://img-blog.csdnimg.cn/img_convert/5a6602f5c7f382c2bb6b1364d22a3565.jpeg)








