LeetCode题:931下降路径最小和

目录

一、题目要求

二、解题思路

(1)状态表示

(2)状态转移方程

(3)初始化

(4)填表顺序

(5)返回值

三、代码


一、题目要求

931. 下降路径最小和

给你一个 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

二、解题思路

这题我们用动态规划思想解决问题,下面是动态规划的一些定义梳理:

(1)状态表示

        这里找到状态表示是通过:经验 + 题目要求,我们定义dp表里的某一位置,就是从上到下,在到达这个位置时的最小路径和。

(2)状态转移方程

 如图:

        假设到达这个位置时,求到这里用的最小路径和,那么就是左上,正上,右上间选一个最小值,加上四角星位置原表的路径值。而左上,正上,右上在dp表中放的都是到达他们位置的最小路径,这也是我们状态表示时的定义。如图:

(3)初始化

        这里,我们再原表基础上要多加1行、2列,其中,第一行可以放0,因为dp对应原表的i j 位置,加上0是不影响这个映射位置要放的值。但是第一列和最后一列就不能放0了,因为定义dp表的位置,都要从左上,正上,右上取出最小值,再加上原表在dp表上映射的位置;所以第一列和最后一列,我们放整型的最大值:Integer.MAX_VALUE。如图:

(4)填表顺序

        从上到下(因为要根据上面的值才能推出当前位置的值),为了方便,再从左到右

(5)返回值

        返回dp表最后一行的最小值


三、代码

class Solution {
    public int minFallingPathSum(int[][] matrix) {
        //1、建立dp表
        int n = matrix.length;//方形的,不用分别求行和列了
        int[][] dp = new int[n + 1][n + 2];
        //2、初始化dp表
        for(int i = 1; i < n + 1; i++) {
            //dp的第一列和最后一列赋值整型的最大值
            dp[i][0] = dp[i][n + 1] = Integer.MAX_VALUE;
        }
        //3、填表
        for(int i = 1; i < n + 1; i++) {
            for(int j = 1; j < n + 1; j++) {
                //左上,上,右上的最小值 + 此时原表的值
                dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j + 1])) + matrix[i - 1][j - 1];
            }
        }
        //4、返回值
        int min = dp[n][0];
        for(int i = 1; i < n + 1; i++) {
            //找出最后一行(第n行)的最小值,返回这个最小值
            min = Math.min(min, dp[n][i]);
        }
        return min;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224988.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

统信UOS_麒麟KYLINOS上使用WeekToDo

原文链接&#xff1a;统信UOS/麒麟KYLINOS上使用WeekToDo hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇在统信UOS/麒麟KYLINOS上使用WeekToDo的介绍。在忙碌的工作和生活中&#xff0c;有效地管理时间和任务是非常重要的。WeekToDo作为一个免费和开源的每周计划器…

python实现pdf转word、word转pdf

我的博客 文章首发于公众号&#xff1a;小肖学数据分析 Python自动化办公通常对常用的办公软件文档格式进行操作&#xff0c;比如Word和PDF。 很多软件都需要付费&#xff0c;作为程序员&#xff0c;怎么可能付费。 下面是一个简单示例&#xff0c;如何在Python中将Word文档…

Java网络编程——非阻塞通信

对于用ServerSocket以及Socket编写的服务器程序和客户程序&#xff0c;它们在运行过程中常常会阻塞。例如当一个线程执行ServerSocket的accept()方法时&#xff0c;假如没有客户连接&#xff0c;该线程就会一直等到有了客户连接才从accept()方法返回。再例如当线程执行Socket的…

跨境电商做自己养号做测评,收货地址怎么解决?

近期有很多朋友问我&#xff0c;自己在做自媒体的时候&#xff0c;物流方面的问题该怎么解决&#xff1f;其实这个问题很简单&#xff0c;下面我就给大家分享一些解决物流问题的方法。 首先&#xff0c;如果你是自己发货&#xff0c;可以选择直接找物流商购买单号或者发空包。这…

基于ssm人事管理信息系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

题目:谈判(蓝桥OJ 545)

题目描述&#xff1a; 解题思路&#xff1a; 本题采用贪心的思想&#xff0c;与蓝桥的合并果子题思路一样。可以使用优先对列&#xff0c;输入进去后自动排序。将两个最小的合并再放入对列中&#xff0c;并将值加入到ans&#xff0c;最终结果即ans。如下图&#xff1a;xy为4&a…

布隆过滤器及其在Java中的实际应用

前言 布隆过滤器一直是面试中的重点&#xff0c;本篇文章将深入探讨Java中的布隆过滤器的底层思想&#xff0c;包括它的工作原理、优缺点等。同时&#xff0c;我们将结合一个小实际案例&#xff0c;来给大家展示布隆过滤器在解决实际问题中的应用。 布隆过滤器简单介绍 在数…

观海微电子---触控显示模组一体化效果方案

随着车载电子后视镜及智能魔镜的普及类似镜面一体化要求的产品越来越多&#xff0c;行业熟知的木纹、一体黑、镜面显示都属于触控显示一体化效果。 一体化效果是指显示模组灭屏状态下玻璃盖板显示区域与非显示区域无明显的色差可见的效果&#xff0c;显示模组亮屏后显示仍可见&…

台灯应该买什么样的才能护眼?学生护眼必备护眼台灯推荐

10月26日&#xff0c;教育部召开新闻发布会&#xff0c;介绍综合防控儿童青少年近视工作情况。全国综合防控儿童青少年近视工作联席会议机制办公室主任、教育部体育卫生与艺术教育司司长王登峰介绍&#xff0c;2018年全国儿童青少年的总体近视率53.6%&#xff0c;2019年总体近视…

内存性能测试

内存带宽 内存带宽计算公式&#xff1a;带宽&#xff1d;内存时钟频率内存总线位数倍增系数&#xff0f;8。 STREAM测试及相关说明 STREAM测试工具是由时为美国Delaware大学教授 John McCalpin提出和完成的, 现在随着John McCalpin教授的工作变动&#xff0c; 负责 STREAM 的…

uniapp使用v-html调用接口,富文本图片 视频自适应大小

前端获取到后台数据 不做处理 就会出现下面问题 图片 视频超出视图显示不全 处理 //info 是富文本 <view v-ifinfo v-htmlreplaceWhite(info)></view>调用下面方法 replaceWhite(html) { // 处理富文本默认图片&#xff0c;视频大小let newContent html.replace…

【开源】基于Vue+SpringBoot的教学过程管理系统

项目编号&#xff1a; S 054 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S054&#xff0c;文末获取源码。} 项目编号&#xff1a;S054&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

luceda ipkiss教程 40:获取版图中任意形状elements的面积

在ipkiss中&#xff0c;通过Polygon可以直接获取任意shape的面积&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from shapely.geometry import Polygonclass Shape(i3.PCell):class Layout(i3.LayoutView):def _generate_elements(self, elems):elem…

如何申请GeoTrust通配符证书?

GeoTrust通配符证书可以保护一个域名下的所有子域名和所有下一级域名。这意味着&#xff0c;当您购买并安装了一个GeoTrust通配符证书后&#xff0c;您的主域名以及所有子域名都将得到SSL加密保护。这对于那些拥有多个子域名的网站来说&#xff0c;无疑是一种非常实用且高效的解…

实例解析关于兔鲜登录tab栏切换案例详细讲解!

文章目录 文章目录 效果图展示 整体制作的一个思路 代码展示 技术细节 小结 效果图展示 点击账户登录显示登录的模块&#xff0c;点击二维码登录显示二维码的模块 整体制作的一个思路 点击哪个模块哪个显示&#xff0c;另外一个模块让它隐藏即可&#xff01; 代码展示 <!…

创建vue项目:node.js下载安装、配置环境变量,下载安装cnpm,配置npm的目录、镜像,安装vue、搭建vue项目开发环境(保姆级教程一)

今天讲解 Windows 如何创建 vue 项目&#xff0c;搭建 vue 开发环境&#xff0c;这是这个系列的第一章&#xff0c;有什么问题请留言&#xff0c;请点赞收藏&#xff01;&#xff01;&#xff01; 文章目录 一、Vue简单介绍二、开始搭建1、安装node.js环境2、配置npm下载时的默…

三:爬虫-网络请求模块(下)

三&#xff1a;网络请求模块&#xff08;下&#xff09; 1.Requests模块&#xff1a; ​ Requests是用Python语言编写&#xff0c;基于urllib&#xff0c;采用 Apache2 Licensed开源协议的 HTTP 库&#xff0c;它比urllib更加的方便&#xff0c;可以节约我们大量的工作&#…

期末速成数据库极简版【查询】(2)

目录 select数据查询----表 【1】筛选列 【2】where简单查询 【3】top-n/distinct/排序的查询 【4】常用内置函数 常用日期函数 常用的字符串函数 【5】模糊查询 【6】表数据操作——增/删/改 插入 更新 删除 【7】数据汇总 聚合 分类 ​ &#x1f642;&#…

OpenCV-python下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

科研神器:Vscode + latex+grammarly+github copilot

科研论文编写神器&#xff1a;Vscode latex grammarly github copilot 相信很多科研人都有使用latex排版及撰写论文的需求&#xff0c;我一开始使用的是在线编辑的overleaf&#xff0c;overleaf的优点是省事便捷&#xff0c;不用配置&#xff0c;并且支持版本回溯&#xff…