题目链接:
题目描述:
给一个n*m二维数组,1代表障碍物,0代表可以走。
求从(0,0)到(n-1,m-1)有多少条路径。
题目分析:
从左上角走到右下角,两种走法,向右走,向下走。得出递推式
res[i][j]=res[i-1][j]+res[i][j-1];
当(i,j)位置有障碍物时,res[i][j]=0,所有到达该点位置的路径都无效。
第0行只能由左边过来,第0列只能由上面下来,特殊处理一下。
代码:
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int n=obstacleGrid.size();
int m=obstacleGrid[0].size();
vector<vector<int>> res(n,vector<int>(m,0));
res[0][0]=obstacleGrid[0][0]==1?0:1;
for(int i=1;i<n;i++){
res[i][0]=obstacleGrid[i][0]==1?0:res[i-1][0];
}
for(int j=1;j<m;j++){
res[0][j]=obstacleGrid[0][j]==1?0:res[0][j-1];
}
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
res[i][j]=obstacleGrid[i][j]==1?0:res[i-1][j]+res[i][j-1];
}
}
return res[n-1][m-1];
}
};