classSolution(object):defuniquePathsWithObstacles(self,obstacleGrid):""" :type obstacleGrid: List[List[int]] :rtype: int """m=len(obstacleGrid)n=len(obstacleGrid[0])returnself.unique(m,n,obstacleGrid,path={})defunique(self,m,n,obstacleGrid,path):ifm==1andn==1andobstacleGrid[m-1][n-1]==0:# base statementreturn1elifm>=1andn>=1andobstacleGrid[m-1][n-1]==1:# pay attention to -1path[m,n]=0return0elifm==0orn==0:# rangereturn0else:if(m-1,n)inpath:ver=path[(m-1,n)]else:ver=self.unique(m-1,n,obstacleGrid,path)if(m,n-1)inpath:hor=path[(m,n-1)]else:hor=self.unique(m,n-1,obstacleGrid,path)step=ver+horpath[m,n]=stepreturnstepif__name__=="__main__":answer=Solution()printanswer.uniquePathsWithObstacles([[0,0]])