
这道题用二维dp
数组来做相当简单,是一道入门题。直接上动规五部曲:
1.确定dp[i][j]
的含义:从起点到位置为[i][j]
处的路径总数
2.确定递推公式 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
3.dp
数组初始化 dp[0][j] = 1;dp[i][0] = 1;
4.确定遍历顺序:从左往右,从上往下遍历
5.打印数组(省略)
由于机器人每一次只能向右或者向下移动,不存在走弯路的情况,从地图的左上角走到右下角,每一步都是有效的,不是无用功。到达(i, j)
处有两种方式:一种是先设法到达(i - 1, j)
处,然后再向下走一步;第二种是先设法到达(i, j - 1)
处,然后再向右走一步。因此到达(i, j)
处的路径数总是等于到达(i - 1, j)
处的路径总数与到达(i, j - 1)
处的路径总数之和。
cpp
class Solution {
public:
int uniquePaths(int m, int n) {
//1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数
//2.确定递推公式 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
//3.dp数组初始化 dp[0][j] = 1;dp[i][0] = 1;
//4.确定遍历顺序:从左往右,从上往下遍历
//5.打印数组(省略)
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];
}
};