[动态规划]Leetcode62.不同路径1
如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
示例1
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
- 向右 -> 向右 -> 向下
- 向右 -> 向下 -> 向右
- 向下 -> 向右 -> 向右
DP定义及状态方程
定义dp[i][j]
表示i,j
网格处的可到达路径树,那么到达dp[i][j]
只能从(i-1,j)
或(i,j-1)
;因此dp[i][j]
的路径数目为dp[i-1][j]与dp[i][j-1]
的路径数之和,即dp[i][j]=dp[i-1][j]+dp[i][j-1]
初始边界条件
对于第一行,每一格只能从左往右走,因此dp[0][j]=1
对于第一列,每一格只能从上往下走,因此dp[i][0]=1
;
最终代码
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
dp = [[0 for i in range(n)] for _ in range(m)]
for i in range(m):
dp[i][0] = 1
for j in range(n):
dp[0][j] = 1
for i in range(1,m):
for j in range(1,n):
dp[i][j] = dp[i-1][j] + dp[i][j-1]
return dp[-1][-1]
如果喜欢作者,欢迎点赞、收藏及关注,谢谢!
欢迎扫描下面二维码关注公众号:阿旭算法与机器学习, 和作者共同学习交流。