Unique Paths II
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.
Thoughts:
We cannot use the combination trip anymore. Are we forced to use graph search?
Set the paths to the top-left of the grid, i.e. (0,0) as 1, if not blocked. Then any point in the grid has the number fo unique paths:
- if blocked
- 0
- else
- path_from_left + path_from_top
Solution:
- class Solution {
- public:
- int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
- const size_t RR = obstacleGrid.size();
- const size_t CC = obstacleGrid[0].size();
- // fill up the grid system
- for(size_t r = 0; r < RR; ++r)
- for(size_t c = 0; c < CC; ++c)
- {
- if (obstacleGrid[r][c] == 1)
- // blocked...
- obstacleGrid[r][c] = 0;
- else if (r == 0 && c == 0)
- // starting point
- obstacleGrid[r][c] = 1;
- else {
- int right_ways = (c == 0 ? 0 : obstacleGrid[r][c-1]);
- int top_ways = (r == 0 ? 0 : obstacleGrid[r-1][c]);
- obstacleGrid[r][c] = right_ways + top_ways;
- }
- }
- return obstacleGrid[RR - 1][CC - 1];
- }
- };