- 不同路径
LeetCode第62题是关于“不同路径”的问题,其描述如下:
问题描述:
一个机器人位于一个 m x n 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?
例如,一个 7 x 3 的网格有多少可能的路径?
动态规划解法思路:
定义状态:
dp[i][j] 表示从起点到达点 (i, j) 的路径总数。
状态转移方程:
dp[i][j] = dp[i-1][j] + dp[i][j-1],表示机器人可以从上方或左方移动到 (i, j)。
初始化条件:
对于网格的第一行 dp[0][j] 和第一列 dp[i][0],只有一种方法到达,即一直向右或一直向下,所以这些值应初始化为 1。
填表计算:
从 dp[0][0] 开始填充,直到 dp[m-1][n-1]。
输出结果:
输出 dp[m-1][n-1],即为从左上角到右下角的不同路径数量。
代码展示:
class solution {int unipuepath(int m, int n){vector<vector<int>> dp(m, vector<int>(n, 0));//将整个二维结构初始化为 m 行 n 列,并且每个元素初始值都为 0for (int i = 0; i < m; i++) dp[i][0] = 1;for (int i = 0; i < n; i++) dp[0][i] = 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];}
};