思路分析:
- 我们使用一个二维数组
dp
来存储不同路径数,其中dp[i][j]
表示从左上角(0, 0)
到达(i, j)
的不同路径数。 - 初始化第一行和第一列,因为在这些位置只有一种方式到达,即向右或向下。
- 然后从第二行和第二列开始,通过将上方格子和左侧格子的路径数相加来计算当前格子的路径数。这是因为从左上角到
(i, j)
的不同路径数等于从(i-1, j)
向下移动的路径数加上从(i, j-1)
向右移动的路径数。 - 最后,返回右下角格子
(m-1, n-1)
的路径数,这就是从左上角到右下角的不同路径数。
class Solution {
public:
int uniquePaths(int m, int n) {
// 创建一个二维数组 dp 来存储不同路径数
int dp[m][n];
// 初始化第一行和第一列,因为只有一种路径到达这些格子
for(int j = 0; j < n; j++)
dp[0][j] = 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];
}
};