class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
// 获取网格的行数和列数
int rows = obstacleGrid.length;
int columns = obstacleGrid[0].length;
// 创建一个二维数组来存储路径数量
int[][] dp = new int[rows][columns];
// 遍历网格中的每个单元格
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
// 检查当前单元格是否为障碍物
if (obstacleGrid[i][j] == 1) {
dp[i][j] = 0; // 如果是障碍物,则无法到达该单元格,路径数量为0
continue;
}
boolean flag = false; // 标记是否存在来自相邻单元格的路径
// 检查左侧单元格是否存在路径(如果存在)
if (j - 1 >= 0) {
dp[i][j] += dp[i][j - 1]; // 将左侧单元格的路径数量加到当前单元格中
flag = true; // 设置标记为true,表示存在路径
}
// 检查上方单元格是否存在路径(如果存在)
if (i - 1 >= 0) {
dp[i][j] += dp[i - 1][j]; // 将上方单元格的路径数量加到当前单元格中
flag = true; // 设置标记为true,表示存在路径
}
// 如果相邻单元格没有路径,将当前单元格视为起点
if (!flag) {
dp[i][j] += 1;
}
}
}
// 返回到达网格右下角的路径数量
return dp[rows - 1][columns - 1];
}
}
力扣:不同路径 II(dp数组)
最新推荐文章于 2024-10-01 05:04:32 发布