题目:
思路:
这道题,思路跟 不同路径| 思路一样,只是不同的是,有障碍物这一块,我们的二维dp数组初始化的时候,要注意,机器人只能向右和向下,所以初始化第一行和第一列的时候,当遇到障碍块的时候,就后面初始化就是 0,障碍块前面是1。而当障碍块在二维地图内的时候,我们dp该位置应该跳过该障碍块的方法,即dp[][]障碍块中应该是 0。
代码详解如下:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid)
{
// 获取地图大小
int n = obstacleGrid.size();
int m = obstacleGrid[0].size();
// 定义dp数组
int dp[200][200];
memset(dp,0,sizeof dp);
// dp数组初始化
for(int i = 0;i < m;++i)
{
if(!obstacleGrid[0][i])
{
dp[0][i] = 1;
}else break;
}
for(int i = 0;i < n;++i)
{
if(!obstacleGrid[i][0])
{
dp[i][0] = 1;
}else break;
}
// 开始dp寻值
for(int i = 1;i < n;++i)
{
for(int j = 1;j < m;++j)
{
// 如果遇到障碍块,则跳过dp
if(obstacleGrid[i][j]) continue;
// dp 递推公式
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
// 返回结果
return dp[n - 1][m - 1];
}