class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m = obstacleGrid.size(); int n = obstacleGrid[0].size(); vector<vector<int> > dp(m+1, vector<int>(n+1, 0)); dp[0][0] = obstacleGrid[0][0] == 0? 1: 0; for(int i = 1; i< m; i++){ dp[i][0] = dp[i-1][0]>0 && obstacleGrid[i][0] == 0? 1: 0; } for(int j = 1; j< n; j++){ dp[0][j] = dp[0][j-1]>0 &&obstacleGrid[0][j] == 0? 1: 0; } for(int i = 1; i<m; i++){ for(int j = 1; j<n; j++){ if(obstacleGrid[i][j] == 1){ dp[i][j]= 0; }else{ dp[i][j] = dp[i][j-1] + dp[i-1][j]; } } } return dp[m-1][n-1]; }};