思路:在Unique Paths上多加了一些障碍点,做法同Unique Paths类似,只是在初始化和计算dp[i][j]的时候,需要判断i行j列是否为障碍点,如果是,表示路径不通,置为0,否则正常计算。dp[i][j]=dp[i - 1][j] + dp[i][j - 1]。
代码:
public class UniquePathsII63 {
public static void main(String[] args) {
int[][] num = { { 0, 0, 0 }, { 0, 1, 0 }, { 0, 0, 0 } };
System.out.println(uniquePathsWithObstacles(num));
}
public static int uniquePathsWithObstacles(int[][] obstacleGrid) {
int[][] dp = new int[obstacleGrid.length][obstacleGrid[0].length];
/****** 初始化的地方需要注意 *********/
for (int i = 0; i < obstacleGrid[0].length; i++)
if (obstacleGrid[0][i] != 1)
dp[0][i] = 1;
else
break;
for (int i = 0; i < obstacleGrid.length; i++)
if (obstacleGrid[i][0] != 1)
dp[i][0] = 1;
else
break;
/****** 初始化完成 ***************/
for (int i = 1; i < obstacleGrid.length; i++) {
for (int j = 1; j < obstacleGrid[0].length; j++) {
if (obstacleGrid[i][j] != 1)
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
return dp[obstacleGrid.length - 1][obstacleGrid[0].length - 1];
}
}
输出: