classSolution{public:intuniquePathsWithObstacles(vector<vector<int>>&obstacleGrid){constintm=obstacleGrid.size();constintn=obstacleGrid[0].size();// dp[i][j] := unique paths from (0, 0) to (i - 1, j - 1)vector<vector<long>>dp(m+1,vector<long>(n+1,0));dp[0][1]=1;// Can also set dp[1][0] = 1for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)if(!obstacleGrid[i-1][j-1])dp[i][j]=dp[i-1][j]+dp[i][j-1];returndp[m][n];}};
classSolution{publicintuniquePathsWithObstacles(int[][]obstacleGrid){finalintm=obstacleGrid.length;finalintn=obstacleGrid[0].length;// dp[i][j] := unique paths from (0, 0) to (i - 1, j - 1)long[][]dp=newlong[m+1][n+1];dp[0][1]=1;// Can also set dp[1][0] = 1for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)if(obstacleGrid[i-1][j-1]==0)dp[i][j]=dp[i-1][j]+dp[i][j-1];return(int)dp[m][n];}}
classSolution:defuniquePathsWithObstacles(self,obstacleGrid:List[List[int]])->int:m=len(obstacleGrid)n=len(obstacleGrid[0])# dp[i][j] := unique paths from (0, 0) to (i - 1, j - 1)dp=[[0]*(n+1)for_inrange(m+1)]dp[0][1]=1# Can also set dp[1][0] = 1foriinrange(1,m+1):forjinrange(1,n+1):ifobstacleGrid[i-1][j-1]==0:dp[i][j]=dp[i-1][j]+dp[i][j-1]returndp[m][n]