力扣-62不同路径
1、题目
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
示例 :
输入:m = 3, n = 7
输出:28
2、分析
- 首先看题目要求的是什么:
总共有多少不同的路径
。可看出是一道求和问题 - 其次分析,如果在其中一个格子,怎么算路径到这个格子的总数。根据题意,机器人每次只能向下或者向右进行增加,是一个关于包含前面路径(即子路径)的求和累加过程,典型的动态规划问题。
- 由图可知,这是一个二维数组,所以我们需要界定dp【i】【j】值表示的含义,很明显,即到这个格子的总共不同路径的个数。
- 然后我们模拟过程,需要怎样的状态转移方程
- 界定初始值
- 最后书写出我们的代码
3、代码及注释
class Solution {
public int uniquePaths(int m, int n) {
// 1.dp[i][j] 表示到第i行j列时路径的总数
int[][] dp = new int[m][n];
// 2.初始化第一行和第一列,因为在模拟过程,发现第一行和第一列格子只有一种走法
for (int i = 0; i < n; i++){
dp[0][i] = 1;
}
for (int j = 0; j < m; j++){
dp[j][0] = 1;
}
// 3.使用状态转移方程,中间的格子,只能由上面和左边过来
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];
}
}
// 4.返回我们最后到的格子所不同路径总合
return dp[m - 1][n - 1];
}
}