#
#
# @param obstacleGrid int整型二维数组
# @return int整型
#
class Solution:
def uniquePathsWithObstacles(self , obstacleGrid ):
# write code here
# dp[i][j]为走到(i,j)有多少路径
# dp[0] = 1,dp[][0]=1
# 核心递推公式是什么呢?
# dp[i][j] = dp[i-1][j]+dp[i][j-1]
# if obstacleGrid[i][j]==1:dp[i][j]=0
# else:dp[i][j] = dp[i-1][j]+dp[i][j-1]
# if o[0][0]==1 or o[n-1][m-1]==1:return 0
n,m = len(obstacleGrid),len(obstacleGrid[0])
if obstacleGrid[0][0]==1 or obstacleGrid[n-1][m-1]==1:
return 0
dp = [[0]*(m) for _ in range(n)]
dp[0][0] = 1
for i in range(n):
for j in range(m):
if obstacleGrid[i][j] == 1:
dp[i][j] = 0
elif i == 0 and j != 0:
dp[i][j] = dp[i][j-1]
elif j==0 and i!=0:
dp[i][j] = dp[i-1][j]
elif i>0 and j>0:
dp[i][j] = dp[i-1][j]+dp[i][j-1]
return dp[n-1][m-1]