题目一:leetcode 62. 有多少条不同路径
题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
解题思路:
方法一:动态规划。由于当前的路径数量与前一个路径数是有关系的所以采用动态规划。
1.状态定义:我们定义dp[i][j]为网格i,j位置的路径数量
2.状态转移方程:当前位置是由左边和上边移动而来的,因为每次只能向下或者向右移动一步。所以是dp[i-1][j]和dp[i][j-1]之和。
dp[i][j] = dp[i-1][j]+dp[i][j-1];
会出现重复路径吗?
不会。因为dp[i-1][j]和dp[i][j-1]必定不会重复
3.初始化:初始我们需要设置dp[0][j]和dp[i][0]全部为1,因为只有一条路径可达
代码:
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for (int i = 0; i < n; i++) {
dp[0][i] = 1;
}
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}