Problem Description:
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.
Code:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class Solution { /** * @param obstacleGrid: A list of lists of integers * @return: An integer */ public int uniquePathsWithObstacles(int[][] obstacleGrid) { // write your code here if (obstacleGrid == null || obstacleGrid.length == 0 || obstacleGrid[0].length == 0){ return 0; } int m = obstacleGrid.length; int n = obstacleGrid[0].length; int[][] paths = new int[m][n]; for (int i = 0; i < m; i++) { if (obstacleGrid[i][0] == 0) { paths[i][0] = 1; } else { break; } } for (int i = 0; i < n; i++) { if (obstacleGrid[0][i] == 0) { paths[0][i] = 1; } else { break; } } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (obstacleGrid[i][j] == 0) { paths[i][j] = paths[i - 1][j] + paths[i][j - 1]; } else { paths[i][j] = 0; } } } return paths[m - 1][n - 1]; } }
Hint:
Same as Unique Path, but you have to pay attention to situation where you can not get to there.