Problem: Unique Paths II

Posted by Marcy on February 18, 2015

Question

A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid.

Now consider if some obstacles are added to the grids. How many unique paths would there be?

An obstacle and empty space is marked as 1 and 0 respectively in the grid.

Note: m and n will be at most 100. Example 1:

Input:
[
  [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:

  • Right -> Right -> Down -> Down
  • Down -> Down -> Right -> Right

Solution

TODO

Code

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        if(obstacleGrid.length == 0 || obstacleGrid[0].length == 0)
            return 0;
        int cache[] = new int[obstacleGrid[0].length];
        cache[0] = 1;
        for(int i=0; i<obstacleGrid.length; i++) {
            for(int j=0; j<obstacleGrid[0].length; j++) {
                if(obstacleGrid[i][j] == 1) {
                    cache[j] = 0;
                }
                else if(j==0) {
                    cache[j] = cache[j];
                }
                else {
                    cache[j] = cache[j] + cache[j-1];
                }
            }
        }
        
        return cache[cache.length-1];
    }
}

Performance

TODO