在Unique Paths的问题上增加了阻碍。
如果【i】【j】上有阻碍,则dp[i][j]=0;
否则dp[i][j]=dp[i-1][j]+dp[i][j-1];
初始化第一行和第一列的时:
第一行:dp[i][j]=dp[i][j-1];
第一列:dp[i][j]=dp[i-1][j];
而dp[0][0]的值由obstacleGrid[0][0]来决定。
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m = obstacleGrid.length;
int n = 0;
if(m>0)n = obstacleGrid[0].length;
int[][] dp = new int[m][n];
if(obstacleGrid[0][0] == 1){
dp[0][0]=0;
return 0;
}else{
dp[0][0]=1;
}
for(int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
if(obstacleGrid[i][j] == 1){
dp[i][j]=0;
}else{
if(i!=0 || j!=0){
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[m-1][n-1];
}