题目
leetcode 62.不同路径
示例
Q:只能向下或向右走,求从Start到Finish的不同路径数
思路
动态规划
定义状态转移方程
在m x n 的矩阵网格中,对于第i行第j列的位置(i, j)
dp[i][j] 表示:从Start到(i, j)的不同路径数
求状态转移方程
只能从(i , j)的左边和上边这两个位置到达(i, j)。这两个位置分别是(i, j - 1) 和 (i - 1, j)。
则从Start到(I, j)会经过(i, j - 1) 或 (i - 1, j),就形成了两种不同路径。
因此dp[i][j] = dp[i][j - 1] + dp[i - 1][j]
初始化
在左边界的位置,只能通过下移来到达,因此路径只有一种,则dp[i][0] = 1
在上边界的位置,只能通过右移来到达,因此路径只有一种,则dp[0][j] = 1
AC代码
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int> (n, 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];
}
};