class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
if(obstacleGrid[0][0]==1)
{
return 0;
}
int m=obstacleGrid.size();//行数
int n=obstacleGrid[0].size();//列数
//初始化方式
vector<vector<int>>dp(m);
for(int i=0;i<m;i++)
{
dp[i]=vector<int>(n,0);
}
dp[0][0]=1;//设置左上角的值
//处理第一行的数据
for(int i=1;i<n;i++)
{
if(obstacleGrid[0][i]!=1&&dp[0][i-1]==1)
{
//没有障碍物并且左侧有一条路径
dp[0][i]=1;
}
else{
dp[0][i]=0;
}
}
//处理第一列数据
for(int i=1;i<m;i++)//这里要注意行和列不要写反
{
if(obstacleGrid[i][0]!=1&&dp[i-1][0]==1)
{
dp[i][0]=1;
}
else
{
dp[i][0]=0;//这是一个条件不要忘记
}
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
if(obstacleGrid[i][j]!=1)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
else
{
dp[i][j]=0;
}
}
}
return dp[m-1][n-1];//注意这里的返回值
}
};
Leetcode:63. 不同路径 II
最新推荐文章于 2024-09-21 23:48:46 发布
本文介绍了一种使用动态规划解决机器人路径规划问题的算法,特别关注在存在障碍物的情况下寻找从起点到终点的路径。通过创建一个二维DP数组,算法考虑了每个网格单元的状态,避免了障碍物,并计算了到达目标的所有可能路径的数量。
977

被折叠的 条评论
为什么被折叠?



