Follow up for "Unique Paths":
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.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0] ]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
Solution 1:
public int uniquePathsWithObstacles(int[][] g) { if(g[0][0] == 1) return 0; int m = g.length; int n = g[0].length; int[][] f = new int[m][n]; f[0][0] = 1; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(g[i][j] == 1) { f[i][j] = 0; } else if(i>0 || j>0){ f[i][j] = (i>0?f[i-1][j]:0) + (j>0?f[i][j-1]:0); } } } return f[m-1][n-1]; }
Solution 2:
public int uniquePathsWithObstacles(int[][] g) { if(g[0][0] == 1) return 0; int m = g.length; int n = g[0].length; int[] f = new int[n]; f[0] = 1; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(g[i][j] == 1) { f[j] = 0; } else if(j>0){ f[j] = f[j] + f[j-1]; } } } return f[n-1]; }