题目链接:Unique Paths II
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.
这道题的要求是在Unique Paths的网格中添加障碍物,计算用多少路径。障碍物用1表示,空地用0表示。
这是Unique Paths的后继版本,不过采用动态规划是最直接的,递推公式同样是dp[i][j] = dp[i][j-1] + dp[i-1][j],只不过这是在[i, j]位置是空地的时候,而当[i, j]位置是障碍物的时候,dp[i][j] = 0。
时间复杂度:O(mn)
空间复杂度:O(mn)
1 class Solution
2 {
3 public:
4 int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid)
5 {
6 if(obstacleGrid.size() == 0 || obstacleGrid[0].size() == 0)
7 return 0;
8
9 vector<vector<int> > vvi(obstacleGrid.size() + 1, vector<int>(obstacleGrid[0].size() + 1, 0));
10 vvi[0][1] = 1;
11 for(int i = 1; i < vvi.size(); ++ i)
12 for(int j = 1; j < vvi[i].size(); ++ j)
13 vvi[i][j] = obstacleGrid[i - 1][j - 1] == 0 ? vvi[i][j - 1] + vvi[i - 1][j] : 0;
14
15 return vvi[vvi.size() - 1][vvi[0].size() - 1];
16 }
17 };