【DP】LeetCode 62. 不同路径

题目链接

62. 不同路径

思路

分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律

表示状态

假如机器人走到了最后一个格子,这时候考虑一下我们需要存储的信息:

  1. 最后一个格子的走法数量
  2. 机器人的坐标,来判断是否走到 Finish

这时候很容易想到使用二维数组 dp[i][j] 来表示机器人在坐标 i 和 j 处的走法数量。

找状态转移方程

可以想一想机器人在走最后到 Finish 有几种走法。一共就两种:从上面到 Finish 和从下面到 Finish。假设走到 Finish 上面的格子有 a 种走法,走到 Finish 左面的格子有 b 种走法,那么走到 Finish 的走法就一共 是 \(a+b\) 种。

那么最后一步的状态转移方程就是

\[dp[m][n] = dp[m-1][n] + dp[m][n-1] \]

边界处理

在长方形区域的上边界和左边界都只有一种走法,所以

\[dp[i][0]=dp[0][i]=1 \]

代码

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];

        Arrays.fill(dp[0], 1);
        for(int i = 0; i < m; i++){
            dp[i][0] = 1;
        }

        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];
    }
}
posted @ 2023-03-31 10:31  Frodo1124  阅读(16)  评论(0编辑  收藏  举报