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+1, vector<int>(n+1, 0));
    7. dp[0][0] = obstacleGrid[0][0] == 0? 1: 0;
    8. for(int i = 1; i< m; i++){
    9. dp[i][0] = dp[i-1][0]>0 && obstacleGrid[i][0] == 0? 1: 0;
    10. }
    11. for(int j = 1; j< n; j++){
    12. dp[0][j] = dp[0][j-1]>0 &&obstacleGrid[0][j] == 0? 1: 0;
    13. }
    14. for(int i = 1; i<m; i++){
    15. for(int j = 1; j<n; j++){
    16. if(obstacleGrid[i][j] == 1){
    17. dp[i][j]= 0;
    18. }else{
    19. dp[i][j] = dp[i][j-1] + dp[i-1][j];
    20. }
    21. }
    22. }
    23. return dp[m-1][n-1];
    24. }
    25. };