- 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
说明:m 和 n 的值均不超过 100。
示例 1:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
- 向右 -> 向右 -> 向下 -> 向下
- 向下 -> 向下 -> 向右 -> 向右
思路:
和没有障碍的类似,就是需要跳过障碍的点,让这些的f(m,n)=0;
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& a) {
int dp[110][110];
memset(dp, 0, sizeof(dp));
dp[0][0] = 1;
int m = a.size();
int n = a[0].size();
if (a[0][0] == 1)
return 0;
for (int i = 1; i < m&&a[i][0]==0; i++)
{
dp[i][0] = 1;
}
for (int i = 0; i < n&&a[0][i]==0; i++)
{
dp[0][i] = 1;
}
for (int i = 1; i < m; i++)
for (int j = 1; j < n; j++){
if (a[i][j] == 1)
continue;
else dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
return dp[m-1][n-1];
}
};
本文探讨了在一个mxn网格中,机器人如何从左上角到达右下角,同时避开标记为障碍物的位置。通过动态规划算法,计算出在存在障碍的情况下,有多少种不同的路径可以到达终点。

6687

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



