一、题目描述
二、分析
本题是62.不同路径的障碍版,整体思路大体一致。
但就算是做过62.不同路径,在做本题也会有感觉遇到障碍无从下手。
其实只要考虑到,遇到障碍dp[i][j]保持0就可以了。
也有一些小细节,例如:初始化的部分,很容易忽略了障碍之后应该都是0的情况。
三、代码
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
if(m == 0) return 0;
int n = obstacleGrid[0].size();
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)
|