トピック:
アイデア:
この質問のアイデアは 、異なるパスと同じです | アイデアは異なります。唯一の違いは、障害物があることです。2 次元の dp 配列を初期化するとき、ロボットは次の場所にしか移動できないという事実に注意する必要があります。 1行目は障害物ブロックに遭遇した場合、後ろが0、前が1の初期値となります。障害物ブロックが 2 次元マップ内にある場合、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];
}