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];
 - }
 - };
 
No comments:
Post a Comment