【Leetcode】62.不同路径
62. 不同路径
题目
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
注意:如果把网格看成矩阵的话,m为列数,n为行数
方法(动态规划)
设$dp[i,j]$为从左上角开始,到达点(i,j)的所有可能路径数。由题意可知,若想到达一个点,只能从该点的上方或者左方到达。因此有如下状态转移方程:
$$ dp[i,j] = dp[i-1,j] + dp[i, j-1]$$确定base case:
- 对于网格第一列上的所有点(j = 0),若想到达它,只能从上方到达,即:
$$ dp[i,j] = dp[i-1,j]$$ - 对于网格第一行上的所有点(i = 0),若想到达它,只能从左方到达,即:
$$dp[i,j] = dp[i, j-1]$$ - 对于网格左上角的点,dp[0,0] = 1;
- 对于网格第一列上的所有点(j = 0),若想到达它,只能从上方到达,即:
代码
1 |
|
方法(数学)
机器人要从左上角走到右下角,需要向右走n-1步,向下走m-1步,总共需要走m+n-2步。
我们要找路径数,也就是要找在这m + n - 2步中,选择n - 1步向右走的方案数。即:
$$
C_{m+n-2}^{n-1}=\frac{(m+n-2) !}{(n-1) !(n-1) !}
$$
1 |
|