classSolution{publicintuniquePaths(int m,int n){int dp[][]=newint[m][n];for(int i =0; i < m; i++) dp[i][0]=1;for(int i =0; i < n; i++) dp[0][i]=1;for(int i =1; i < m; i++){for(int j =1; j < n; j++){
dp[i][j]= dp[i -1][j]+ dp[i][j -1];}}return dp[m -1][n -1];}}
classSolution{publicintuniquePathsWithObstacles(int[][] obstacleGrid){int n = obstacleGrid.length;int m = obstacleGrid[0].length;int dp[][]=newint[n][m];for(int i =0; i < n && obstacleGrid[i][0]==0; i++) dp[i][0]=1;for(int i =0; i < m && obstacleGrid[0][i]==0; i++) dp[0][i]=1;for(int i =1; i < n; i++){for(int j =1; j < m; j++){if(obstacleGrid[i][j]==0){
dp[i][j]= dp[i -1][j]+ dp[i][j -1];}}}return dp[n -1][m -1];}}