day39 动态规划part2 代码随想录算法训练营 63. 不同路径 II

题目:63. 不同路径 II

我的感悟:

  • 题目不难,就是不知道哪个煞笔,把路拦截死了,并且入口就放石头,我真是吐了。

理解难点:

  • 初始值的遇到障碍要Break
  • 其他我写的没错
  • 边界考虑:还有入口和出口有障碍物的话,要直接返回0.

听课笔记:

  • 差不多,
  • 考虑的点就是:
    • 初始值后面为break
    • 开头和结尾有障碍物的时候,直接return 0 
    • 其他一样

代码示例:

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:        
        m = len(obstacleGrid)   # 外层 深度
        n = len(obstacleGrid[0])    # 内层 长度
        if obstacleGrid[m - 1][n - 1] == 1 or obstacleGrid[0][0] == 1:
            return 0
        dp = [[0]*n for _ in range(m)]    
        for i in range(m):  # 外层
            if obstacleGrid[i][0] ==1:
                break    # 说明有障碍物了
            # 只有没有障碍物就设置为1
            dp[i][0] = 1
        for i in  range(n): # 内层
            if obstacleGrid[0][i]==1:
                break
            dp[0][i] = 1
        
        for i in range(1,m):
            for j in range(1,n):
                if obstacleGrid[i][j] ==1:  # 如果这里有障碍物就跳过
                    # dp[i][j] = 0 这里写不写懂都可以
                    continue
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
        
        return dp[m-1][n-1]

通过的截图:

未通过截图:

扩展写法:

资料:

  1. 不同路径 II 

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

posted @ 2024-02-22 13:20  o蹲蹲o  阅读(1)  评论(0编辑  收藏  举报