Python3:
class Solution: def uniquePathsWithObstacles(self, obstacleGrid): """ :type obstacleGrid: List[List[int]] :rtype: int """ if obstacleGrid[0][0] == 1: return 0 for i in range(len(obstacleGrid)): for j in range(len(obstacleGrid[0])): if obstacleGrid[i][j] == 1 or i==j==0: obstacleGrid[i][j] -= 1 else: a = obstacleGrid[i-1][j] if i>0 else 0 b = obstacleGrid[i][j-1] if j>0 else 0 obstacleGrid[i][j] += a+b return abs(obstacleGrid[-1][-1])
C++:
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int row = obstacleGrid.size(), col = obstacleGrid[0].size(); int dp[row][col]; if(obstacleGrid[0][0]==1) return 0; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(obstacleGrid[i][j] == 1) dp[i][j] = 0; else if(i==0&&j==0) dp[0][0] = 1; else if(i==0) dp[i][j] = dp[i][j-1]; else if(j==0) dp[i][j] = dp[i-1][j]; else dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } return dp[row-1][col-1]; } };