题目

image.png

思路

其实跟62差不多的解法,障碍位置就是dp为0。

注意点!

调了三次才解决

  1. 在第一行/第一列遇到障碍之后,后面都是0了!【初始化的部分,很容易忽略了障碍之后应该都是0的情况。】

    我的写法(有些冗余)

    ```javascript var uniquePathsWithObstacles = function(obstacleGrid) { let m =obstacleGrid.length let n =obstacleGrid[0].length let dp =new Array(m).fill(1).map(()=>new Array(n).fill(1))

    // if(obstacleGrid[0][0]===1) return 0 //非常冗余的for赋值 for(let i=0;i<m;i++){

    1. if(obstacleGrid[i][0]===1){
    2. for(let j=i;j<m;j++){
    3. dp[j][0]=0
    4. }
    5. break
    6. }

    } for(let i=0;i<n;i++){

     if(obstacleGrid[0][i]===1){
         for(let j=i;j<n;j++){
             dp[0][j]=0
         }
        break
     }
    

    } console.log(dp)

    for(let i=1;i<m;i++){

     for(let j =1;j<n;j++){
         if(obstacleGrid[i][j]===1){
             dp[i][j] =0
         }else{
             dp[i][j] =dp[i-1][j]+dp[i][j-1]
         }
     }
    

    } return dp[m-1][n-1]

};

<a name="YLgIJ"></a>
# 大佬
```javascript
var uniquePathsWithObstacles = function(obstacleGrid) {
    const m = obstacleGrid.length
    const n = obstacleGrid[0].length
    const dp = Array(m).fill().map(item => Array(n).fill(0))

    for (let i = 0; i < m && obstacleGrid[i][0] === 0; ++i) {
        dp[i][0] = 1
    }

    for (let i = 0; i < n && obstacleGrid[0][i] === 0; ++i) {
        dp[0][i] = 1
    }

    for (let i = 1; i < m; ++i) {
        for (let j = 1; j < n; ++j) {
            dp[i][j] = obstacleGrid[i][j] === 1 ? 0 : dp[i - 1][j] + dp[i][j - 1]
        }
    }

    return dp[m - 1][n - 1]
};