63不同路径II

一题目:

代码&思路:

class Solution {

    public static int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // 如果起点 (0, 0) 是障碍物,直接返回 0,因为没有可行的路径
        if (obstacleGrid[0][0] == 1) {
            return 0;
        }

        // 获取网格的行数
        int m = obstacleGrid.length;
        // 获取网格的列数
        int n = obstacleGrid[0].length;

        // 初始化记忆数组 memory,大小为 (m+1) x (n+1)
        // 多出一行一列是为了方便边界处理,避免额外的条件判断
        int[][] dp = new int[m + 1][n + 1];

        // 初始化起点的路径数量
        // 由于起点 (0, 0) 不是障碍物,我们可以通过设置 memory[0][1] = 1 或 memory[1][0] = 1
        // 来确保 memory[1][1](即起点)的路径数量为 1
        dp[0][1] = 1;

        // 动态规划填充记忆数组,用i遍历每一行
        for (int i = 1; i <= m; i++) {
            // 遍历每一列
            for (int j = 1; j <= n; j++) {
                // 如果当前格子不是障碍物,计算memory[i][j]的值,如果是障碍物,memory[i][j] 保持默认值 0(不可达)
                if (obstacleGrid[i - 1][j - 1] == 0) {
                    // 当前格子的路径数量 = 上方格子的路径数量 + 左方格子的路径数量
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }

        // 返回终点的路径数量
        return dp[m][n];
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容