62. 不同路径
题目简述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
思路:
1. 到每个网格都有对应路径数
2. 假设到网格(p,q)的路径数为dp[p][q],它应该和dp[p-1][q]和dp[p][q-1]有关,因为只能从上面或者左边走过来
3. 确定初始条件,当p=q=0,令dp[0][0]=1
4. 当p=0,只能从左边走来
5. 当q=0,只能从上边走来
代码如下:
class Solution: def uniquePaths(self, m: int, n: int) -> int: dp=[[0 for _ in range(n)] for _ in range(m)] dp[0][0]=1 for i in range(m): for j in range(n): if i==0 and j==0: dp[i][j]=1 elif i==0 and j!=0: dp[i][j]=dp[0][j-1] elif i!=0 and j==0: dp[i][j]=dp[i-1][0] else: dp[i][j]=dp[i][j-1]+dp[i-1][j] return dp[m-1][n-1]
63. 不同路径II
题目简述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
思路:
上一题加一个判断语句,当执行到i,j时,该位置有障碍物,就令dp[i][j]=0即可
代码如下:
class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: m=len(obstacleGrid) n=len(obstacleGrid[0]) dp=[[0 for _ in range(n)] for _ in range(m)] dp[0][0]=1 for i in range(m): for j in range(n): if obstacleGrid[i][j]==1: dp[i][j]=0 continue if i==0 and j==0: dp[i][j]=1 elif i==0 and j!=0: dp[i][j]=dp[0][j-1] elif i!=0 and j==0: dp[i][j]=dp[i-1][0] else: dp[i][j]=dp[i][j-1]+dp[i-1][j] return dp[m-1][n-1]
标签:obstacleGrid,day39,int,机器人,网格,62,63,range,dp From: https://www.cnblogs.com/cp1999/p/17343714.html