博客
关于我
leetcode931. 下降路径最小和(动态规划)
阅读量:214 次
发布时间:2019-03-01

本文共 1365 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到通过给定方形整数数组 A 的下降路径的最小和。下降路径的定义是从第一行的任何元素开始,每一行只能选择一个元素,并且下一行选择的元素与当前行的元素最多只能相隔一列。

方法思路

我们可以使用动态规划来解决这个问题。动态规划的状态转移方程如下:

  • dp[i][j] 表示到达数组的第 i 行第 j 列的最小路径和。
  • 状态转移:dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i-1][j+1]) + A[i-1][j-1],其中 dp[i-1][j-1], dp[i-1][j], 和 dp[i-1][j+1] 是从上一行转移来的状态。
  • 初始化:第一行的 dp 值直接从数组 A 取得,因为第一行没有上面可以转移。

解决代码

public class Solution {    public int minFallingPathSum(int[][] A) {        int n = A.length;        if (n == 0) return 0;        int m = A[0].length;        int[][] dp = new int[n + 1][m + 2];        for (int i = 1; i <= n; i++) {            Arrays.fill(dp[i], Integer.MAX_VALUE);        }        for (int j = 1; j <= m; j++) {            dp[1][j] = A[0][j - 1];        }        for (int i = 2; i <= n; i++) {            for (int j = 1; j <= m; j++) {                dp[i][j] = Math.min(                    Math.min(dp[i-1][j], dp[i-1][j-1]),                    dp[i-1][j+1]                ) + A[i-1][j-1];            }        }        int res = Integer.MAX_VALUE;        for (int j = 1; j <= m; j++) {            if (dp[n][j] < res) {                res = dp[n][j];            }        }        return res;    }}

代码解释

  • 初始化数组:我们创建了一个 dp 数组,其大小为 (n+1) x (m+2),以便处理边界情况。第一行的 dp 值被初始化为数组 A 的值。
  • 填充第一行:第一行的 dp 值直接从数组 A 取得。
  • 动态规划计算:从第二行开始,依次计算每个位置的最小路径和,状态转移方程如上述。
  • 寻找最小值:最后一行的所有位置中找到最小值,即为答案。
  • 这种方法确保了我们在处理每一行和每一列时,都能正确地计算出最小路径和。

    转载地址:http://cmfv.baihongyu.com/

    你可能感兴趣的文章
    navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
    查看>>
    Navicat可视化界面导入SQL文件生成数据库表
    查看>>
    Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
    查看>>
    Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
    查看>>
    Navicat如何连接MySQL
    查看>>
    navicat导入.sql文件出错2006- MySQLserver has gone away
    查看>>
    Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
    查看>>
    navicat怎么导出和导入数据表
    查看>>
    Navicat报错:1045-Access denied for user root@localhost(using passwordYES)
    查看>>
    Navicat通过存储过程批量插入mysql数据
    查看>>
    Navicat(数据库可视化操作软件)安装、配置、测试
    查看>>
    NB-IOT使用LWM2M移动onenet基础通信套件对接之APN设置
    查看>>
    nc命令详解
    查看>>
    ndk特定版本下载
    查看>>
    NDK编译错误expected specifier-qualifier-list before...
    查看>>
    Neat Stuff to Do in List Controls Using Custom Draw
    查看>>
    Necurs僵尸网络攻击美国金融机构 利用Trickbot银行木马窃取账户信息和欺诈
    查看>>
    NeHe OpenGL教程 07 纹理过滤、应用光照
    查看>>
    NeHe OpenGL教程 第四十四课:3D光晕
    查看>>
    Neighbor2Neighbor 开源项目教程
    查看>>