Clean and Easy - (O[1] space)
\nvar uniquePathsWithObstacles = function(obstacleGrid) {\n    const m = obstacleGrid.length, n = obstacleGrid[0].length \n    \n    if(obstacleGrid[0][0] || ob
```\nvar uniquePathsWithObstacles = function(obstacleGrid) {\n    const m = obstacleGrid.length, n = obstacleGrid[0].length \n    \n    if(obstacleGrid[0][0] || obstacleGrid[m - 1][n - 1]) return false\n    \n    for(let i = 0; i < m; i++) {\n        for(let j = 0; j < n; j++) {\n            if(i === 0 && j === 0) {\n                obstacleGrid[i][j] = 1\n                continue\n            }\n            \n            if(obstacleGrid[i][j] === 1) {\n                obstacleGrid[i][j] = 0\n                continue\n            }\n            \n            if(i === 0) {\n                obstacleGrid[i][j] = obstacleGrid[i][j - 1]\n                continue\n            }\n            \n            if(j === 0) {\n                obstacleGrid[i][j] = obstacleGrid[i - 1][j]\n                continue\n            }\n            \n            obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1]\n        }\n    }\n    \n    \n    return obstacleGrid[m - 1][n - 1]\n};\n```
['Dynamic Programming', 'JavaScript']