Unique Paths II

 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.


 


Example 1:



Input: obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]

Output: 2

Explanation: There is one obstacle in the middle of the 3x3 grid above.

There are two ways to reach the bottom-right corner:

1. Right -> Right -> Down -> Down

2. Down -> Down -> Right -> Right

Example 2:



Input: obstacleGrid = [[0,1],[0,0]]

Output: 1

 


Constraints:


m == obstacleGrid.length

n == obstacleGrid[i].length

1 <= m, n <= 100

obstacleGrid[i][j] is 0 or 1.


class Solution {
     public int solve(int i,int j,int m,int n, int [][] dp,int[][] obstacleGrid)
    {
              // Out of bounds
        if (i >= m || j >= n || obstacleGrid[i][j]==1) {
            return 0;
        }
       
        if(i==m-1 && j==n-1)
        {
            return 1;
        }

   
        if(dp[i][j] !=-1)
        {
            return dp[i][j];
        }
        int right=solve(i,j+1,m,n,dp,obstacleGrid);
        int down=solve(i+1,j,m,n,dp,obstacleGrid);

        return dp[i][j]=right+down;
       
    }
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int row=obstacleGrid.length;
        int col=obstacleGrid[0].length;
         int [][] dp= new int[row][col];

          // Initialize all cells to -1 (uncomputed)
        for (int m = 0; m < row; m++) {
            for (int n = 0; n < col; n++) {
                dp[m][n] = -1;
            }
        }
        return solve(0,0,row,col,dp,obstacleGrid);
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence