【DP】LeetCode 62. 不同路径
题目链接
思路
分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律
表示状态
假如机器人走到了最后一个格子,这时候考虑一下我们需要存储的信息:
- 最后一个格子的走法数量
- 机器人的坐标,来判断是否走到 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];
}
}