问题描述:
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.
示例:
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.
问题分析:
还是利用动态规划求解,求解思路与Unique Paths类似,这里不多赘述。
过程详见代码:
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if (obstacleGrid[0][0] == 1 || obstacleGrid.back().back() == 1) return 0;
for (int i = 0; i < obstacleGrid.size(); i++)
{
for (int j = 0; j < obstacleGrid[0].size(); j++)
{
if (i == 0 && j == 0) obstacleGrid[i][j] = 1;
else
{
if (obstacleGrid[i][j] == 1) obstacleGrid[i][j] = -1;
if (obstacleGrid[i][j] != -1)
{
if (i >= 1 && obstacleGrid[i - 1][j] != -1) obstacleGrid[i][j] += obstacleGrid[i - 1][j];
if (j >= 1 && obstacleGrid[i][j - 1] != -1) obstacleGrid[i][j] += obstacleGrid[i][j - 1];
}
}
}
}
return obstacleGrid.back().back();
}
};