代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II

62.不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?

解题
思路:
1.二叉树的深度搜索(超时!)
uniquePaths(m,n)表示走到(m,n)的方法数,每一步由左边过来或由上边过来,
所以递推公式:uniquePaths(m,n)=uniquePaths(m-1,n)+uniquePaths(m,n-1)
终止条件:递归到第一步,就是(0,1)或(1,0),return 1

点击查看代码
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m == 1 or n == 1:
            return 1
        return self.uniquePaths(m - 1, n) + self.uniquePaths(m, n - 1)

2.动态规划
知识点:递推公式(或动态规划)通过将问题分解为子问题,并通过存储子问题的结果来避免重复计算。它的时间复杂度和空间复杂度都比递归要低。
dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
初始化:第一行和第一列都是1,这个和递归的终止条件不太一样
边界条件:注意下标,是从(0,0)到(m-1,n-1)

点击查看代码
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp=[[0]*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[m-1][n-1]

63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。

解题

思路:有障碍,就是标记对应dp为0
初始化:如果第一行和第一列有障碍,障碍后是0不是1

点击查看代码
class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        #从(0,0)到(m-1,n-1),大小m*n
        m=len(obstacleGrid)
        n=len(obstacleGrid[0])
        dp=[[0]*n for _ in range(m)]
        for i in range(m):
            if obstacleGrid[i][0]==0:
                dp[i][0]=1
            else:
                break
        for j in range(n):
            if obstacleGrid[0][j]==0:
                dp[0][j]=1
            else:
                break
        for i in range(1,m):
            for j in range(1,n):
                if obstacleGrid[i][j]==1:
                    dp[i][j]=0
                else:
                    dp[i][j]=dp[i-1][j]+dp[i][j-1]
        return dp[m-1][n-1]
posted @ 2024-07-11 21:35  Y荷兰豆Y  阅读(6)  评论(0编辑  收藏  举报