63. 不同路径 II

m x n的格子,下标从0 x 0到m-1 x n-1,所以dp初始化为dp[m][n],从0x0遍历到m-1 x n-1

  1. dp[i][j]定义为移动到i x j格子的路径数
  2. 转移方程:

有障碍物的地方置为dp置为0

  • 在第一行和第一列全为1(碰到障碍物后,后面的全为0)
  • 其他时候,dp[i][j] = dp[i][j-1] + dp[i-1][j]
  1. class Solution {
  2. public:
  3. int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
  4. int m = obstacleGrid.size();
  5. int n = obstacleGrid[0].size();
  6. vector<vector<int>>dp(m,vector<int>(n,0));
  7. for(int i=0;i<m && obstacleGrid[i][0]==0;i++)dp[i][0]= 1 ;
  8. for(int j=0;j<n && obstacleGrid[0][j]==0;j++)dp[0][j]= 1 ;
  9. for(int i=1;i<m;i++)
  10. for(int j=1;j<n;j++)
  11. {
  12. dp[i][j] = obstacleGrid[i][j]==0 ? (dp[i-1][j] + dp[i][j-1]):0 ;
  13. }
  14. return dp[m-1][n-1];
  15. }
  16. };