LeetCode.63. 不同路径 II
1、注意起点终点是否有障碍物
2、注意边界是否有障碍物
3、常规点按递推公式递推
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
int dp[m+1][n+1];
/*起点和终点有障碍物则没有路径*/
if((obstacleGrid[m-1][n-1] == 1) || (obstacleGrid[0][0] ==1)) {
return 0;
}
/*边界是否有障碍物的情况*/
int flg = 0;
for(int j = 1; j <= n; j++) {
if(flg == 1) {
dp[1][j] = 0;
} else
if(obstacleGrid[0][j-1] == 0) {
dp[1][j] = 1;
} else {
flg = 1;
dp[1][j] = 0;
}
}
flg = 0;
for(int i = 1; i <= m; i++) {
if(flg == 1) {
dp[i][1] = 0;
} else
if(obstacleGrid[i-1][0] == 0) {
dp[i][1] = 1;
} else {
flg = 1;
dp[i][1] = 0;
}
}
/*递推*/
for(int i = 2; i <= m; i++) {
for(int j = 2; j <= n; j++) {
if(obstacleGrid[i-1][j-1] == 1) {
dp[i][j] = 0;
} else {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[m][n];
}
};