Unique Paths II (dp题)
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0] ]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
代码:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) { if(obstacleGrid.size()==0) return 0; int row=obstacleGrid.size(); int col=obstacleGrid[0].size(); int dp[100][100]; memset(dp,0,sizeof(dp)); bool rblockTag=false; bool cblockTag=false; if(obstacleGrid[0][0]==1||obstacleGrid[row-1][col-1]==1) return 0; for(int i=1;i<col;++i){ if(obstacleGrid[0][i]==1) rblockTag=true; if(!rblockTag) dp[0][i]=1; else dp[0][i]=0; } for(int j=0;j<row;++j){ if(obstacleGrid[j][0]==1) cblockTag=true; if(!cblockTag) dp[j][0]=1; else dp[j][0]=0; } for(int i=1;i<row;++i){ for(int j=1;j<col;++j){ if(obstacleGrid[i][j]==1) dp[i][j]=0; else dp[i][j]=dp[i][j-1]+dp[i-1][j];//i和j是从1开始 } } return dp[row-1][col-1]; } };