​LeetCode解法汇总931. 下降路径最小和

news/2024/7/3 7:02:51

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径  最小和 。

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)(row + 1, col) 或者 (row + 1, col + 1) 。

示例 1:

输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]
输出:13
解释:如图所示,为和最小的两条下降路径

示例 2:

输入:matrix = [[-19,57],[-40,-5]]
输出:-59
解释:如图所示,为和最小的下降路径

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 100
  • -100 <= matrix[i][j] <= 100

解题思路:

* 931. 下降路径最小和

* 解题思路:

* 广度搜索的方式。

* 构建一个同样大小的二维数组sum,存储该路径下可能的最小值。而下一行sum[y][x]位置的最小值,就是sum[y-1][x-1],sum[y-1][x],sum[y-1][x+1]三者的最小值加上自身。

* 最后,求出最后一行的最小值即可。

代码:

class Solution931
{
public:
    int minFallingPathSum(vector<vector<int>> &matrix)
    {

        vector<vector<int>> sum(matrix.size(), vector<int>(matrix[0].size()));
        sum[0] = matrix[0];
        for (int y = 1; y < matrix.size(); y++)
        {
            for (int x = 0; x < matrix[0].size(); x++)
            {
                sum[y][x] = getMinValue(y - 1, x, sum) + matrix[y][x];
            }
        }
        int maxValue = 10000;
        for (int x = 0; x < sum[0].size(); x++)
        {
            maxValue = min(maxValue, sum[matrix.size() - 1][x]);
        }
        return maxValue;
    }

    int getMinValue(int y, int x, vector<vector<int>> &sum)
    {
        int minValue = sum[y][x];
        if (x > 0)
        {
            minValue = min(minValue, sum[y][x - 1]);
        }
        if (x < sum.size() - 1)
        {
            minValue = min(minValue, sum[y][x + 1]);
        }
        return minValue;
    }
};


http://lihuaxi.xjx100.cn/news/1340730.html

相关文章

2.Vue3中Cesium地图初始化及地图控件配置

前言 本文中&#xff0c;我们主要介绍 Cesium 在 Vue 3运行环境的配置&#xff0c;以及 Cesium 实例中控件的显隐设置&#xff0c;本文是后续文章内容的基础&#xff0c;项目代码在此查看&#xff1b;通过本文&#xff0c;我们可以得到一个纯净的 cesium 项目&#xff0c;后续的…

STM32驱动ADS1256串口输出-AD转换

STM32驱动ADS1256串口输出-AD转换 ADS1256ADS1256简介芯片特点引脚说明模块相关寄存器与命令相关程序初始化 实验效果接线实验现象 ADS1256 ADS1256简介 ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模数转换器。该芯片还带有4个可编程的I/O口、输入缓冲器和可编…

Java-API简析_java.lang.Runtime类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131714695 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

npm 安装报错-错误集景-持续更新

错误信息 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! Found: eslint7.15.0 npm ERR! node_modules/eslint npm ERR! dev eslint"7.15.0" from the root project npm ERR! peer eslint"> 1.6.0"…

ChatGpt基于第三方API2D服务封装的SpringBoot starter

前置条件&#xff1a; 看下API2D官网&#xff0c;第三方API2D服务对接流程&#xff1a; 其对接文档地址 https://api2d.com/wiki/doc 一:创建一个空的Maven项目 完成后整的项目层级图如下 1.pom.xml 中添加相关依赖包 <?xml version"1.0" encoding"UTF-…

Cobalt Strike实战实例

客户端 初始化界面如下&#xff1a; 可以多个客户端同时连接&#xff0c;可以聊天。 msg 指定id 文字。 msg 文字。 创建监听器 这里出现了&#xff0c;监听设置不成功。原因是服务端的CS4.0报错了。我重新下载就可以了。如果这里有问题&#xff0c;可联系我。我帮你。这里解…

【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…

成为机器人工程师需要学习那些技术

机器人工程师是未来比较吃香的工作岗位&#xff0c;要成为机器人工程师&#xff0c;你需要学习以下技术&#xff1a; 机械工程&#xff1a;了解机械结构、运动学和动力学&#xff0c;以及机械设计和制造方面的知识。 电子工程&#xff1a;学习电路设计、电子元件选择和电子系…