1 class Solution { 2 public: 3 int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { 4 if(obstacleGrid.size()==0 || obstacleGrid[0].size()==0) return 0; 5 int m = obstacleGrid.size(), n = obstacleGrid[0].size(); 6 if(obstacleGrid[m-1][n-1]==1) return 0; 7 8 vector<vector<int> > dp(m); 9 for(int i=0;i<dp.size();++i) dp[i].resize(n); 10 for(int i=0;i<dp.size();++i){ 11 for(int j=0;j<dp[i].size();++j) dp[i][j]=0; 12 } 13 14 dp[0][0] = (obstacleGrid[0][0]==1) ? 0 : 1; 15 for(int i=1;i<dp.size();++i){ 16 if(dp[i-1][0] && !obstacleGrid[i][0]) dp[i][0] = 1; 17 } 18 for(int j=1;j<dp[0].size();++j){ 19 if(dp[0][j-1] && !obstacleGrid[0][j]) dp[0][j] = 1; 20 } 21 for(int i=1;i<dp.size();++i){ 22 for(int j=1;j<dp[i].size();++j){ 23 if(i>=1 && !obstacleGrid[i-1][j]) dp[i][j] += dp[i-1][j]; 24 if(j>=1 && !obstacleGrid[i][j-1]) dp[i][j] += dp[i][j-1]; 25 } 26 } 27 28 return dp[m-1][n-1]; 29 } 30 };