第一行或者第一列中如果有障碍就无法到达该列或该行下一位置,所以后面都为0。其他位置如果左边或者上面有障碍,就无法从该处到达。可能在大佬看来这题比较简单,但是独立写出来的感觉还是挺舒服的?
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int n = obstacleGrid.length, m = obstacleGrid[0].length;
if (obstacleGrid[n-1][m-1] == 1)
return 0;
int[][] dp = new int[n][m];
for (int i = 0; i < n; i++) {
if (obstacleGrid[i][0] != 1)
dp[i][0] = 1;
else
break;
}
for (int j = 0; j < m; j++) {
if (obstacleGrid[0][j] != 1)
dp[0][j] = 1;
else
break;
}
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++) {
int left = obstacleGrid[i-1][j] == 1 ? 0 : dp[i-1][j];
int up = obstacleGrid[i][j-1] == 1 ? 0 : dp[i][j-1];
dp[i][j] = left + up;
}
return dp[n-1][m-1];
}