day39【代码随想录】动态规划之不同路径、不同路径||、最小路径和

news2024/9/23 3:27:45

文章目录

  • 前言
  • 一、不同路径(力扣62)
  • 二、不同路径||(力扣63)
  • 三、最小路径和(力扣64)


前言

1、不同路径
2、不同路径||
3、最小路径和


一、不同路径(力扣62)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?
在这里插入图片描述
思路:
五部曲:
1、dp数组:
dp[i][j]:到达第i行第j列的路径有dp[i][j]条
2、初始化 (易错)
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;
3、递推公式
dp[i][j] = dp[i-1][j]+dp[i][j-1];
只能从这两个方向过来
4、遍历顺序
从前向后
5、打印检查

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m][n];
        for (int i = 0; i < m; i++) dp[i][0] = 1;
        for (int j = 0; j < n; j++) dp[0][j] = 1;
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                dp[i][j] = dp[i-1][j]+dp[i][j-1];
            }
        }
    return dp[m-1][n-1];
    }
}

在这里插入图片描述

二、不同路径||(力扣63)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。
在这里插入图片描述思路:
五部曲:
1、dp数组:
dp[i][j]:到达第i行第j列的路径有dp[i][j]条
2、初始化
for(int i = 0;i < m && obstacleGrid[i][0]!=1;i++) dp[i][0]=1;
for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;
3、递推公式
dp[i][j] = (obstacleGrid[i][j] == 0) ? dp[i - 1][j] + dp[i][j - 1] : 0;
4、遍历顺序
从前向后
5、打印检查

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];

        //如果在起点或终点出现了障碍,直接返回0
        if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) {
            return 0;
        }

        for(int i = 0;i < m && obstacleGrid[i][0]!=1;i++)
            dp[i][0]=1;
        for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) {
            dp[0][j] = 1;
        }
        //遍历
        for(int x=1;x<m;x++){
            for(int y=1;y<n;y++){
                if(obstacleGrid[x][y]!=1){
                    dp[x][y]=dp[x-1][y]+dp[x][y-1];
                }else
                    dp[x][y]=0;
            }
        }
        return dp[m-1][n-1];
    }
}

在这里插入图片描述

三、最小路径和(力扣64)

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。
在这里插入图片描述
思路:
五部曲:
1、dp数组:
我们完全不需要建立dp矩阵浪费额外空间,直接遍历 grid[i][j] 修改即可
2、初始化
for(int i=1;i<m;i++) grid[i][0] += grid[i-1][0];
for(int j=1;j<n;j++) grid[0][j] += grid[0][j-1];
3、递推公式
grid[i][j] +=Math.min(grid[i-1][j],grid[i][j-1])
4、遍历顺序
从前向后
5、打印检查

class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        //初始化
        for(int i=1;i<m;i++){
            grid[i][0] += grid[i-1][0];
        }
        for(int j=1;j<n;j++){
            grid[0][j] += grid[0][j-1];
        }
        //遍历
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                grid[i][j] += Math.min(grid[i-1][j],grid[i][j-1]);
            }
        }
        return grid[m-1][n-1];
    }
}

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark09: Spark之checkpoint

一、checkpoint概述 checkpoint&#xff0c;是Spark提供的一个比较高级的功能。有时候&#xff0c;我们的Spark任务&#xff0c;比较复杂&#xff0c;从初始化RDD开始&#xff0c;到最后整个任务完成&#xff0c;有比较多的步骤&#xff0c;比如超过10个transformation算子。而…

使用Python,Opencv检测图像,视频中的猫

使用Python&#xff0c;Opencv检测图像&#xff0c;视频中的猫&#x1f431; 这篇博客将介绍如何使用Python&#xff0c;OpenCV库附带的默认Haar级联检测器来检测图像中的猫。同样的技术也可以应用于视频流。这些哈尔级联由约瑟夫豪斯&#xff08;Joseph Howse&#xff09;训练…

Ubuntu最新版本(Ubuntu22.04LTS)安装Tftp服务及其使用教程

目录 一、概述 二、在Ubuntu安装Tftp服务器  &#x1f356;2.1 安装tftp服务端&#xff08;tftpd-hpa&#xff09;  &#x1f356;2.2 配置&#xff0c;修改/etc/default/tftpd-hpa  &#x1f356;2.3 创建tftp服务的下载目录  &#x1f356;2.4 重启tftp服务器 三、在Ubun…

C++高级篇学习笔记

文章目录 前言 本文记录C一些面试难点问题剖析。 1. 左右值和右值引用的作用 左值&#xff1a;可以在左边&#xff0c;表达式结束后依然存在的持久对象&#xff0c;一般有名字&#xff0c;可以取地址。 提示&#xff1a; 前置自加/自减 可以做左值&#xff1b; 右值在右边&a…

java08-面向对象3

一&#xff1a;static 关键字&#xff1a;静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性、方法、代码块、内部类 2. static 修饰属性&#xff1a;静态变量&#xff08;或类变量&#xff09; 2.1 属性&#xff0c;是否使用static修饰&#xff0c;又分为静态属…

应对新的挑战!ChatGPT将如何改变多域作战?

​公众号博主推送内容&#xff0c;未经许可&#xff0c;不得转载或者引用。 原文&#xff1a;Exploring the Possibilities of ChatGPT in Rugged Military AI Applications 《ChatGPT&#xff1a;利用最先进的技术支撑多域作战》 ChatGPT是一款基于GPT-3大型自然语言模型的…

Spring Security in Action 第六章 一个小型的安全网络应用程序

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

Leetcode.1138 字母板上的路径

题目链接 Leetcode.1138 字母板上的路径 Rating &#xff1a; 1411 题目描述 我们从一块字母板上的位置 (0, 0)出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqr…

day01查询 排序 数据处理函数 分组

文章目录1、什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间的关系是什么&#xff1f;2、安装MySQL数据库管理系统。3、MySQL数据库的完美卸载&#xff01;4、看一下计算机上的服务&#xff0c;找一找MySQL的服务在哪里&#xff1f;5、…

autox.js在vscode(win7)与雷神模拟器上的开发环境配置

目录 下载autox.js 安装autox.js&#xff1f; 在电脑上搭建autox.js开发环境 安装vscode 安装autox.js插件 雷神模拟器连接vscode 设置雷神模拟器IP 设置autox.js应用IP地址等 下载autox.js 大体来说&#xff0c;就是一个运行在Android平台上的JavaScript 运行环境 和…

计算机软考好不好考?

软考看你备考哪一科&#xff1f;对软考证书的需求量怎么样&#xff1f;对自己工作就业是否有帮助&#xff1f;从而来体现软考的意义~ 软考是什么&#xff1f; 软考全称是计算机技术与软件专业技术资格考试&#xff0c;通俗来说就是职称考试&#xff0c;也可以说是技术水平认定…

嵌入式Linux系统开发笔记(十六)

根文件系统rootfs启动验证测试 接下来我们使用测试一下前面创建好的根文件系统 rootfs&#xff0c;测试方法使用 NFS 挂载。 6.1 检查是否在Ubuntu主机中安装和开启了NFS服务 &#xff08;特别注意&#xff1a;nfs 配置文件/etc/exports中添加的路径一定要与实际使用的绝对路…

Elasticsearch:如何在提高跨索引搜索相关性的同时返回更多相关的文档

在 Elasticsearch 的搜索中&#xff0c;经常遇到的情况是&#xff0c;我们创建一个 data view 或者 index pattern 跨多个索引&#xff0c;这样我们可以对它们进行统一的搜索。我们有遇到这样的情况&#xff1a;完全匹配的文档的分数反而低于部分匹配的文档&#xff0c;这是为什…

Synchronized和Lock的区别

在分布式开发中&#xff0c;锁是控制线程安全的重要方式。Java提供了两种锁机制synchronized 和 Lock。 1、特性区别 Synchronized是Java内置的线程同步关键字&#xff1b; Lock是JUC包下面的一个接口&#xff0c;它有很多实现类&#xff0c;比如ReentrantLock就是它的一个实…

内存优化 · 基础论 · 初识 Android 内存优化

【小木箱成长营】内存优化系列文章&#xff1a; 内存优化 工具论 常见的 Android 内存优化工具和框架 内存优化 方法论 揭开内存优化神秘面纱 内存优化 实战论 内存优化实践与应用 Tips: 关注微信公众号小木箱成长营&#xff0c;回复"内存优化"可免费获得内存优…

Linux驱动开发(二)

一、驱动流程 驱动需要以下几个步骤才能完成对硬件的访问和操作&#xff1a; 模块加载函数 module_init注册主次设备号 <应用程序通过设备号找到设备>驱动设备文件 <应用程序访问驱动的方式> 1、手动创建 &#xff08;mknod&#xff09;2、程序自动创建file_oper…

Synchronized 原理

基本特点(只考虑 JDK 1.8): 1. 开始时是乐观锁, 如果锁冲突频繁, 就转换为悲观锁.2. 开始是轻量级锁实现, 如果锁被持有的时间较长, 就转换成重量级锁.3. 实现轻量级锁的时候大概率用到的自旋锁策略4. 是一种不公平锁5. 是一种可重入锁6. 不是读写锁 加锁工作过程 JVM 将 s…

【Kafka】【三】安装Kafka服务器

Kafka基本知识 Kafka介绍 Kafka是最初由Linkedin公司开发&#xff0c;是⼀个分布式、⽀持分区的&#xff08;partition&#xff09;、多副本的 &#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最⼤的特性就是可以实时的处理 …

蓝牙安全(AES-CCM)

目录 AES-CCM CCM规范加密过程 CCM规范解密认证过程 formatting函数 counter generation函数 蓝牙AES-CCM加密流程 参考文献 AES-CCM Advanced Encryption Standard-Counter with Cipher Block Chaining-Message Authentication Code 自蓝牙4.1起蓝牙的加密算法开始采…

RabbitMQ-其他问题

一、幂等性问题&#xff1a;消费者在消费MQ中的消息时&#xff0c;MQ已把消息发送给消费者&#xff0c;消费者在给MQ返回ACK时网络中断&#xff0c;故MQ未收到确认消息&#xff0c;该消息会重新发送给其他消费者&#xff0c;或者在网络重连后再次发送给消费者&#xff0c;但实际…