本文最后更新于603 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6
1.本题与上一题不同路径的思路差不多相同,只是在路中间有障碍,对我来说,一个就是没有考虑这个障碍在起点和终点处的情况,还有就是对于二维数组的结构没有一个深刻的认识,简单来说就是从矩阵中找到行列的值我有些疑问。再一个就是对于初始化dp数组的时候没想好怎么处理好这个元素的值,动态规划五部曲含金量还在增加。
CPP
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>> dp(m, vector<int>(n, 0));
if(obstacleGrid[0][0] == 1 || obstacleGrid[m - 1][n - 1] == 1){
return 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 - 1][j] + dp[i][j - 1];
}
}
}
return dp[m - 1][n - 1];
}
};