63. 不同路径 II
m x n的格子,下标从0 x 0到m-1 x n-1,所以dp初始化为dp[m][n],从0x0遍历到m-1 x n-1
- dp[i][j]定义为移动到i x j格子的路径数
- 转移方程:
有障碍物的地方置为dp置为0
- 在第一行和第一列全为1(碰到障碍物后,后面的全为0)
- 其他时候,dp[i][j] = dp[i][j-1] + dp[i-1][j]
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector<vector<int>>dp(m,vector<int>(n,0));
for(int i=0;i<m && obstacleGrid[i][0]==0;i++)dp[i][0]= 1 ;
for(int j=0;j<n && obstacleGrid[0][j]==0;j++)dp[0][j]= 1 ;
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
{
dp[i][j] = obstacleGrid[i][j]==0 ? (dp[i-1][j] + dp[i][j-1]):0 ;
}
return dp[m-1][n-1];
}
};