115.Unique Path II
"不同的路径" 的跟进问题:
现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用 1 和 0 来表示。
提示:注意初始化与前面不同,只能初始化第一个点。遍历f[m][n],一旦有障碍就设置为0,有左面或前面就+=。
答案:
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();
if(m == 0){
return 0;
}
int n = obstacleGrid[0].size();
if(n == 0){
return 0;
}
vector<vector<int>> f(m,vector<int>(n));
int i,j;
for(i = 0; i < m; ++i){
for(j = 0; j < n; ++j){
if(obstacleGrid[i][j] == 1){
f[i][j] = 0;
}
else{
if(i == 0 && j == 0){
f[i][j] = 1;
}
else{
f[i][j] = 0;
if(i - 1 >= 0){
f[i][j] += f[i-1][j];
}
if(j - 1 >= 0){
f[i][j] += f[i][j - 1