public class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
if (obstacleGrid == null || obstacleGrid.length < 1 || obstacleGrid[0].length < 1) return 0;
int m = obstacleGrid.length;
int n = obstacleGrid[0].length;
int[][] dp = new int[m][n];
int ii = 0;
while (ii < m && obstacleGrid[ii][0] == 0) {
dp[ii++][0] = 1;
}
int jj = 0;
while (jj < n && obstacleGrid[0][jj] == 0) {
dp[0][jj++] = 1;
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (obstacleGrid[i][j] != 1) {
dp[i][j] = (obstacleGrid[i - 1][j] == 1 ? 0 : dp[i - 1][j]) +
(obstacleGrid[i][j - 1] == 1 ? 0 : dp[i][j - 1]);
}
}
}
return dp[m-1][n-1];
}
}