Easy to understand JAVA solution
public class Solution {\n    public int uniquePathsWithObstacles(int[][] obstacleGrid) {\n        int m = obstacleGrid.length;\n        int n = obstacleGrid[0].
    public class Solution {\n    public int uniquePathsWithObstacles(int[][] obstacleGrid) {\n        int m = obstacleGrid.length;\n        int n = obstacleGrid[0].length;\n        for(int i = 0; i < m; i++) {\n            for(int j = 0; j < n; j++) {\n                if(obstacleGrid[i][j] == 1) {\n                    obstacleGrid[i][j] = 0;\n                }\n                else {\n                    if(i == 0 && j == 0) obstacleGrid[i][j] = 1;\n                    else if(i == 0 && j > 0) obstacleGrid[i][j] = obstacleGrid[i][j-1];\n                    else if(i > 0 && j == 0) obstacleGrid[i][j] = obstacleGrid[i-1][j];\n                    else obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1];\n                }\n            }\n        }\n        return obstacleGrid[m-1][n-1];\n    }\n    }
['Dynamic Programming', 'Java']