[leetcode] 62. 不同路径

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 62. 不同路径相关的知识,希望对你有一定的参考价值。

62. 不同路径

我们直接用递归来模拟

class Solution {

    public static int cnt;

    public int uniquePaths(int m, int n) {
        cnt = 0;
        dfs(1, 1, m, n);
        return cnt;
    }

    public void dfs(int i, int j, int m, int n) {
        if (i == m && j == n) {
            cnt++;
            return;
        }
        if ((j + 1) <= n)
            dfs(i, j + 1, m, n);
        if ((i + 1) <= m)
            dfs(i + 1, j, m, n);
    }
}

好吧,果然超时了

超在哪了,有些格子做了重复性计算。

其实我们用动态规划来做就简单了:

倒着想,既然机器人只能往右或者往下走,假设机器人已经走到了(i,j),那么机器人只会从左方或者右方走过来的

我们用f[i][j]来描述机器人走到(i,j)的路径数

显然,状态转移方程为:f[i][j] = f[i-1][j]+f[i][j-1]

初始条件是多少呢?当i==j==1时,显然路径数就1个,所有初始条件是f[0][0]=1

最终结果是:f[m-1][n-1]

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] f = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 && j == 0) {
                    f[i][j] = 1;
                }
                if (i - 1 >= 0) {
                    f[i][j] += f[i - 1][j];
                }
                if (j - 1 >= 0) {
                    f[i][j] += f[i][j - 1];
                }
            }
        }
        return f[m - 1][n - 1];
    }
}

以上是关于[leetcode] 62. 不同路径的主要内容,如果未能解决你的问题,请参考以下文章

62. 不同路径 -LeetCode

LeetCode 62. 不同路径c++/java详细题解

leetcode 每日一题 62. 不同路径

leetcode 每日一题 62. 不同路径

算法动态规划 ③ ( LeetCode 62.不同路径 | 问题分析 | 自顶向下的动态规划 | 自底向上的动态规划 )

算法动态规划 ③ ( LeetCode 62.不同路径 | 问题分析 | 自顶向下的动态规划 | 自底向上的动态规划 )