leetcode 62 63
动规,会就很有意思
public static int uniquePathsWithObstacles(int[][] obstacleGrid){
int m = obstacleGrid.length;
int n= obstacleGrid[0].length;
if(m==1) {
for(int i=0;i<n;i++){
if(obstacleGrid[0][i]==1)
return 0;
}
return 1;
}
if(n==1) {
for(int i=0;i<m;i++){
if(obstacleGrid[i][0]==1)
return 0;
}
return 1;
}
int[][] dp =new int[m+1][n+1];
boolean obs=false;
for(int i=1;i<=n;i++) {
if(obstacleGrid[0][i-1]==1||obs){
dp[1][i]=0;
obs=true;//这里写麻烦了,其实obstacleGrid[0][i-1]==1 和i<=n 与&&一下就可了,终端循环,后边值默认为0
}else {
dp[1][i] = 1;
}
}
obs=false;
for(int i=1;i<=m;i++) {
if(obstacleGrid[i-1][0]==1||obs) {
dp[i][1] = 0;
obs=true;//这里写麻烦了,其实obstacleGrid[0][i-1]==1 和i<=n 与&&一下就可了,终端循环,后边值默认为0
}else{
dp[i][1]=1;
}
}
for(int i=2;i<=m;i++){
for(int j=2;j<=n;j++) {
if(obstacleGrid[i-1][j-1]==1){
dp[i][j]=0;
}else {
dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
}
}
}
return dp[m][n];
}