"""
題目分析:
這題中等難度,和上一題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)