1.不同路径
一个机器人位于一个 m x n
网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”
问总共有多少条不同的路径
因为题给信息,一维数组已经完成不了要求,所以我们要用二维数组
1.状态表示:用dp[ i ][ j ]表示以第 i 行 j 列为结尾的路径总和
2.状态转移方程:dp[ i ][ j ] = dp[ i - 1][ j ] + dp[ i ][ j - 1 ]
3.初始化:dp[0][1] = 1
4.填表顺序:从上往下填每一行,从左往右填每一列
5.返回值:dp[m][n]
class Solution {
public:
int uniquePaths(int m, int n)
{
//1. 创建 dp 表
//2. 初始化
//3. 填表
//4. 返回值
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
dp[0][1] = 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][n];
}
};
这是ac代码
2.不同路径II
一个机器人位于一个 m x n
网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1
和 0
来表示
1.状态表示:用dp[ i ][ j ]表示以第 i 行 j 列为结尾的路径总和
2.状态转移方程:dp[ i ][ j ] = dp[ i - 1][ j ] + dp[ i ][ j - 1 ]
3