首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >算法奇妙屋(十一)-不同路径问题(动态规划)

算法奇妙屋(十一)-不同路径问题(动态规划)

作者头像
景画
发布2025-12-19 12:45:55
发布2025-12-19 12:45:55
50
举报
时间复杂度:O(m*n) 空间复杂度:O(m*n) 这篇博客所有题的时间与空间复杂度都是如此

一. 力扣 62. 不同路径

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 算法原理

3. 代码

代码语言:javascript
复制
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m + 1][n + 1];
        dp[0][1] = 1;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                dp[i + 1][j + 1] = dp[i][j + 1] + dp[i + 1][j];
            }
        }
        return dp[m][n];
    }

二. 力扣 63 不同路径 II

1. 题目

与上道题不同路径十分相似, 只是添加了障碍物

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码

代码语言:javascript
复制
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // 创建dp表
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m + 1][n + 1];
        // 初始化
        dp[0][1] = 1;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (obstacleGrid[i][j] == 0) {
                    dp[i + 1][j + 1] = dp[i][j + 1] + dp[i + 1][j];
                }
            }
        }
        return dp[m][n];
    }

三. 力扣 LCR 166. 珠宝的最高价值

1. 题目

与上面的题类似, 甚至更简单

在这里插入图片描述
在这里插入图片描述

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码

代码语言:javascript
复制
    public int jewelleryValue(int[][] frame) {
        int m = frame.length;
        int n = frame[0].length;
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                dp[i + 1][j + 1] = Math.max(dp[i][j + 1],dp[i + 1][j]) + frame[i][j];
            }
        }
        return dp[m][n];
    }

四. 力扣 931. 下降路径最小和

1. 题目

题目意思是:到达一个位置有左右上角与上方三种到达方式, 求路径上数字最小和, 这里需要注意重点不再是右下角, 而是最后一行全是终点

在这里插入图片描述
在这里插入图片描述

2. 算法原理

在这里插入图片描述
在这里插入图片描述

3. 代码

代码语言:javascript
复制
    public int minFallingPathSum(int[][] matrix) {
        // 创建dp表
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] dp = new int[m + 1][n + 2];
        // 初始化dp表
        for (int i = 0; i < m + 1; i++) {
            dp[i][0] = dp[i][n + 1] = Integer.MAX_VALUE;
        }
        // 求dp值
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n ; j++) {
                dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i - 1][j - 1], dp[i - 1][j + 1])) + matrix[i - 1][j - 1];
            }
        }
        int ret = dp[m][1];
        for (int j = 2; j <= n; j++) {
            ret = Math.min(ret, dp[m][j]);
        }
        return ret;
    }

五. 力扣 64. 最小路径和

1. 题目

在这里插入图片描述
在这里插入图片描述

2. 算法原理

与上面的题基本类似, 大差不差, 这里直接上图

在这里插入图片描述
在这里插入图片描述

3. 代码

代码语言:javascript
复制
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 0; i <= m; i++) {
            dp[i][0] = Integer.MAX_VALUE;
        }
        for (int j = 0; j <= n; j++) {
            dp[0][j] = Integer.MAX_VALUE;
        }
        dp[0][1] = dp[1][0] = 0;
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];
            }
        }
        return dp[m][n];
    }

六. 力扣 174. 地下城游戏

1. 题目

这道题是很经典的使用以某位置为起点的题型, 题目两个重点是:①进入第一个钢筋和出最后一个房间都要计算其中的点数 ②健康值必须大于0

在这里插入图片描述
在这里插入图片描述

2. 算法原理

3. 代码

代码语言:javascript
复制
    public int calculateMinimumHP(int[][] dungeon) {
        int m = dungeon.length;
        int n = dungeon[0].length;
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 0; i <= m; i++) {
            dp[i][n] = Integer.MAX_VALUE;
        }
        for (int j = 0; j <= n; j++) {
            dp[m][j] = Integer.MAX_VALUE;
        }
        dp[m][n - 1] = dp[m - 1][n] = 1;
        for (int i = m - 1; i >= 0; i--) {
            for (int j = n - 1; j >= 0; j--) {
                dp[i][j] = Math.max(1, (Math.min(dp[i][j + 1], dp[i + 1][j]) - dungeon[i][j]));
            }
        }
        return dp[0][0];
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 时间复杂度:O(m*n) 空间复杂度:O(m*n) 这篇博客所有题的时间与空间复杂度都是如此
  • 一. 力扣 62. 不同路径
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 二. 力扣 63 不同路径 II
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 三. 力扣 LCR 166. 珠宝的最高价值
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 四. 力扣 931. 下降路径最小和
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 五. 力扣 64. 最小路径和
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
  • 六. 力扣 174. 地下城游戏
    • 1. 题目
    • 2. 算法原理
    • 3. 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档