classSolution(object): defuniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int """
m = len(obstacleGrid) n = len(obstacleGrid[0])
# If the starting cell has an obstacle, then simply return as there would be # no paths to the destination. if obstacleGrid[0][0] == 1: return0
# Number of ways of reaching the starting cell = 1. obstacleGrid[0][0] = 1
# Filling the values for the first column for i inrange(1,m): obstacleGrid[i][0] = int(obstacleGrid[i][0] == 0and obstacleGrid[i-1][0] == 1)
# Filling the values for the first row for j inrange(1, n): obstacleGrid[0][j] = int(obstacleGrid[0][j] == 0and obstacleGrid[0][j-1] == 1)
# Starting from cell(1,1) fill up the values # No. of ways of reaching cell[i][j] = cell[i - 1][j] + cell[i][j - 1] # i.e. From above and left. for i inrange(1,m): for j inrange(1,n): if obstacleGrid[i][j] == 0: obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1] else: obstacleGrid[i][j] = 0
# Return value stored in rightmost bottommost cell. That is the destination. return obstacleGrid[m-1][n-1]