LeetCode | 63 | 不同路徑 II

"""
題目分析:
    這題中等難度,和上一題62題相似;就是多了有障礙物的限制條件
理論:dp
    轉移方程: dp[i][j]=dp[i][j-1]+dp[i-1][j]
注意/難點:
    需要預處理上邊界、左邊界的問題;考慮障礙物之後無法到達
    還要考慮起點和終點就有障礙物的情況
"""
import numpy as np
class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: list) -> int:
        m=len(obstacleGrid)
        n=len(obstacleGrid[0])
        dp=[[0 for _ in range(n)] for _ in range(m)]                #定義dp矩陣
        #預處邊界->第1行
        for i in range(n):
            if obstacleGrid[0][i]==1:break                   #障礙物之後無法到達
            dp[0][i]=1
        #預處邊界->第1列
        for j in range(m):
            if obstacleGrid[j][0]==1:break                   #障礙物之後無法到達
            dp[j][0]=1
        #處理dp
        for i in range(1,m):
            for j in range(1,n):
                if obstacleGrid[i][j]==1:                    #障礙物處理下個條件
                    continue
                dp[i][j]=dp[i-1][j]+dp[i][j-1]                        #轉移方程
        print(np.array(dp))                                         #debug.olny
        return dp[m-1][n-1]                                             #返回值
    
# obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
obstacleGrid = [[0,1],[0,0]]
ans=Solution().uniquePathsWithObstacles(obstacleGrid)
print(ans)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章