#
#
# @param obstacleGrid int整型二维数组
# @return int整型
#
class Solution:
def uniquePathsWithObstacles(self , obstacleGrid ):
if not obstacleGrid or obstacleGrid[0][0] == 1 or obstacleGrid[-1][-1] == 1:
return 0
m = len(obstacleGrid) # 行数
n = len(obstacleGrid[0]) # 列数
# 创建dp数组,初始化为0
dp = [[0 for _ in range(n)] for _ in range(m)]
# 起点设置为1
dp[0][0] = 1
# 初始化第一行
for j in range(1, n):
if obstacleGrid[0][j] == 0: # 如果没有障碍
dp[0][j] = dp[0][j-1] # 只能从左边来
else:
dp[0][j] = 0 # 有障碍,路径数为0
# 初始化第一列
for i in range(1, m):
if obstacleGrid[i][0] == 0: # 如果没有障碍
dp[i][0] = dp[i-1][0] # 只能从上边来
else:
dp[i][0] = 0 # 有障碍,路径数为0
# 填充dp数组
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] # 返回终点的路径数