// 跟62差不多 https://blog.csdn.net/TIMELIMITE/article/details/100053683
// 就是对当前格子判断下,初始化的时候横竖碰到1就不能走了
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int n = obstacleGrid.length;
int m = obstacleGrid[0].length;
long[][] dp = new long[n][m];
for (int i = 0;i < n; i ++){
for (int j = 0;j < m; j ++){
dp[i][j] = 0;
}
}
for (int i = 0;i < n; i++) {
if (obstacleGrid[i][0] == 1) {
break;
}else {
dp[i][0] = 1;
}
}
for (int j = 0; j < m; j ++){
if (obstacleGrid[0][j] == 1) {
break;
}else {
dp[0][j] = 1;
}
}
for (int i = 1; i < n; i ++){
for (int j = 1;j < m; j++)
if (obstacleGrid[i][j] == 0){
dp[i][j] = 0;
if (obstacleGrid[i - 1][j] == 0) {
dp[i][j] += dp[i - 1][j];
}
if (obstacleGrid[i][j - 1] == 0) {
dp[i][j] += dp[i][j - 1];
}
}
}
// print(dp);
return (int)dp[n - 1][m - 1];
}
public void print(long[][] ans) {
for (int i = 0;i < ans.length; i++){
for (int j = 0;j < ans[i].length; j++){
System.out.printf("%d ", ans[i][j]);
}
System.out.println();
}
}
}