跟进“不同的路径”:
现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用1和0来表示。
样例
如下所示在3x3的网格中有一个障碍物:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
一共有2条不同的路径从左上角到右下角。
注意
m和n均不超过100
思路:这题和不同的路径的解题思路是一样的只是增加了一个条件而以,其代码为:
class Solution {
public:
/**
* @param obstacleGrid: A list of lists of integers
* @return: An integer
*/
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
// write your code here
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>> path(m+1, vector<int>((n+1), 0));
if(!obstacleGrid[0][0])
path[1][1] = 1;
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <=n; ++j) {
if (path[i-1][j] && !obstacleGrid[i-1][j-1])
path[i][j] += path[i-1][j];
if (path[i][j-1] && !obstacleGrid[i-1][j-1])
path[i][j] += path[i][j-1];
}
}
return path[m][n];
}
};