核心思路
- 机器人只能向右 或 向下走
- 到达
(i,j)的路径数 = 从上面来 + 从左边来 - 第一行、第一列全部都是 1(只有一条路)
状态转移:
dp[i][j] = dp[i-1][j] + dp[i][j-1]
解释
- 起点在
(0,0) - 终点在
(m-1, n-1) - 第一行只能一直右走 → 1 条
- 第一列只能一直下走 → 1 条
- 中间每个格子 = 上面的路数 + 左边的路数
完整代码实现:
java
class Solution {
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
// 第一列全是1
for(int i = 0;i<m;i++){
dp[i][0] = 1;
}
//第一行全是1
for(int j = 0;j<n;j++){
dp[0][j] = 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];
}
}