思路和1一样,利用动态规划求解。 变化在两处:
1. 在赋初值的时候,由于只能向右和向下,那么第一排和第一列各点在障碍之前的可能路径数为1,障碍之后的只能是0
2. 动态规划的时候,障碍物所在点的可能路径数为0,这样也保证了该点到其他点没有可能的路径
动态规划的思路还是一样,res[i][j] = res[i-1][j]+res[i][j-1]
public class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int row = obstacleGrid.length;
if(row==0)
{
return 0;
}
int col = obstacleGrid[0].length;
int [][]res = new int[row][col];
for(int i=0;i<row;i++ )
{
if(obstacleGrid[i][0]==1)
{
break;
}
res[i][0] = 1;
}
for(int i=0;i<col;i++)
{
if(obstacleGrid[0][i]==1)
{
break;
}
res[0][i] = 1;
}
for(int i=1;i<row;i++)
{
for(int j=1;j<col;j++)
{
if(obstacleGrid[i][j]==1)
{
res[i][j]=0;
}
else
{
res[i][j] = res[i-1][j]+res[i][j-1];
}
}
}
return res[row-1][col-1];
}
}