一、题目描述

在这里插入图片描述
在这里插入图片描述

二、分析

本题是62.不同路径的障碍版,整体思路大体一致。

但就算是做过62.不同路径,在做本题也会有感觉遇到障碍无从下手。

其实只要考虑到,遇到障碍dp[i][j]保持0就可以了。

也有一些小细节,例如:初始化的部分,很容易忽略了障碍之后应该都是0的情况。

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();//row
if(m == 0) return 0;
int n = obstacleGrid[0].size();//col
vector<vector<int>> dp(m);
for(auto& vc: dp)
{
vc.resize(n, 0);
}
for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;
for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;
for(int i = 1; i < m; ++i)
{
for(int j = 1; j < n; ++j)
{
//无障碍
if(obstacleGrid[i][j] == 0)
{
dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
}
}
}
return dp[m - 1][n - 1];
}
};

在这里插入图片描述

时间复杂度:O(m n)
空间复杂度:O(m
n)