解题思路和上一道题一样,不过要加入一些条件判断来过滤掉有障碍物的情况:
import numpy as np
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
obstacleGrid = np.array(obstacleGrid)
if obstacleGrid[0,0] == 1:
return 0
M = len(obstacleGrid)
N = len(obstacleGrid[0])
import functools
@functools.lru_cache(None)
def fuc(m,n):
if m == 1 and sum(obstacleGrid[M - m,N - n:]) == 0:
return 1
if m == 1 and sum(obstacleGrid[M - m,N - n:]) != 0:
return 0
if n == 1 and sum(obstacleGrid[M - m:,N - n]) == 0:
return 1
if n == 1 and sum(obstacleGrid[M - m:,N - n]) != 0:
return 0
if obstacleGrid[M-m+1,N-n] == 1:
if obstacleGrid[M-m,N-n+1] != 1:
return fuc(m,n-1)
else:
return 0
else:
if obstacleGrid[M-m,N-n+1] != 1:
return fuc(m-1,n) + fuc(m,n-1)
else:
return fuc(m-1,n)
return fuc(M,N)