package leetcode;
public class demo_63 {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int[][] dp=new int[obstacleGrid.length][obstacleGrid[0].length];
int flag=0;
//如果初始位置就有障碍,则所有都不通过
if(obstacleGrid[0][0]==1) {return 0;}
for(int i=0;i<obstacleGrid.length;i++) {
//如果最上边有一个障碍,则最上边障碍物之后的点都是不可达的
for(int j=0;j<obstacleGrid[0].length;j++) {
if(i==0&&obstacleGrid[i][j]==1) {
for(int w=j;w<obstacleGrid[0].length;w++) {
dp[i][w]=0;
}
break;
}
////如果最左边有一个障碍,则最左边障碍物之后的点都是不可达的
if(j==0&&obstacleGrid[i][j]==1) {
dp[i][j]=0;
flag=1;
}
if(j==0&&flag==1) {
dp[i][j]=0;
continue;
}
//动态规划
if(i==0||j==0) {
dp[i][j]=1;
}
else {
if(obstacleGrid[i][j]==1) {
dp[i][j]=0;
}
else {
dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
}
}
}
System.out.println(dp[obstacleGrid.length-1][obstacleGrid[0].length-1]);
return dp[obstacleGrid.length-1][obstacleGrid[0].length-1];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_63 d63=new demo_63();
int[][] obstacleGrid= {{0,1},{0,0}};
d63.uniquePathsWithObstacles(obstacleGrid);
}
}