思路:与不同路径I类似,都是动态规划,结果取决于之前的点,有障碍的点需要设置为0,对于第一列和第一行,因为它们没有前一列和前一行,需要特殊判断。
import numpy as np
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
n = len(obstacleGrid)
m = len(obstacleGrid[0])
dp = np.ones((n,m), dtype=int) - np.array(obstacleGrid, dtype=int)
dp[0][0] = not obstacleGrid[0][0]
for i in range(1, m):
dp[0][i] = dp[0][i - 1] if not obstacleGrid[0][i] else 0
for j in range(1, n):
dp[j][0] = dp[j - 1][0] if not obstacleGrid[j][0] else 0
for i in range(1, n):
for j in range(1, m):
if not obstacleGrid[i][j]:
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
# print("i为 " + str(i) +"j为 " + str(j))
else:
dp[i][j] = 0
return dp[n - 1][m - 1]