주제:
아이디어:
이 질문에 대한 아이디어는 Different Paths | 아이디어가 다릅니다. 유일한 차이점은 장애물이 있다는 것입니다. 2차원 dp 배열을 초기화할 때 로봇은 장애물이 있는 곳으로만 이동할 수 있다는 사실에 주의해야 합니다. 첫 번째 열에서는 장애물 블록을 만나면 뒤는 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];
}