Description

You are given an m x n integer array grid. There is a robot initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m - 1][n - 1]). The robot can only move either down or right at any point in time.

An obstacle and space are marked as 1 or 0 respectively in grid. A path that the robot takes cannot include any square that is an obstacle.

Return the number of possible unique paths that the robot can take to reach the bottom-right corner.

The testcases are generated so that the answer will be less than or equal to 2 * 109.

Idea

  • Dynamic Programming

Code

class Solution:
    def uniquePathsWithObstacles(self, grid: List[List[int]]) -> int:
        rows, cols = len(grid), len(grid[0])
        if grid[0][0] == 1:
            return 0
 
        grid[0][0] = 1 
        for i in range(0, rows):
            for j in range(0, cols):
                if not i == j == 0:
                    if grid[i][j] == 1:
                        grid[i][j] = 0
                    else:
                        if i > 0:
                            grid[i][j] += grid[i-1][j]
                        if j > 0:
                            grid[i][j] += grid[i][j-1]
        
        return grid[-1][-1]