代码学习第32天---动态规划

随想录日记part32

t i m e : time: time 2024.03.30



主要内容:今天开始要学习动态规划的相关知识了,今天的内容主要涉及两个方面:
不同路径 ; 不同路径 II。

  • 62.不同路径
  • 63. 不同路径 II


动态规划五部曲:
【1】.确定dp数组以及下标的含义
【2】.确定递推公式
【3】.dp数组如何初始化
【4】.确定遍历顺序
【5】.举例推导dp数组

Topic1不同路径

题目:

一个机器人位于一个 m ∗ n m *n mn 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
在这里插入图片描述

输入: m = 3 , n = 7 m = 3, n = 7 m=3,n=7
输出: 28 28 28

思路:

按照上面的五个步骤给出下面的代码:
代码如下:

class Solution {
    public int uniquePaths(int m, int n) {
        // 【1】dp[m][n]表示到(m,n)总走法
        int[][] dp = new int[m + 1][n + 1];
        // 【3】初始化
        for (int i = 1; i <= n; i++) {
            dp[1][i] = 1;
        }
        for (int i = 1; i <= m; i++) {
            dp[i][1] = 1;
        }
        for (int i = 2; i <= m; i++) {
            for (int j = 2; j <= n; j++) {
                // 【2】.确定递推公式
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m][n];
    }
}

时间复杂度 O ( m × n ) O(m × n) O(m×n)
空间复杂度 O ( m × n ) O(m × n) O(m×n)



Topic2不同路径||

题目:

一个机器人位于一个 m x n m x n mxn 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
在这里插入图片描述

输入: o b s t a c l e G r i d = [ [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , [ 0 , 0 , 0 ] ] obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]] obstacleGrid=[[0,0,0],[0,1,0],[0,0,0]]
输出: 2 2 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
【1】 向右 -> 向右 -> 向下 -> 向下
【2】 向下 -> 向下 -> 向右 -> 向右
思路:

按照上面的五个步骤给出下面的代码,在注释中给出具体的思路:
整体代码如下:

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        // 【1】dp[m][n]表示到(m,n)总走法
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        // 【3】.dp数组如何初始化
        int flag = 0;
        for (int i = 0; i < m; i++) {
            if (obstacleGrid[i][0] == 1 && flag == 0) {
                dp[i][0] = -1;
                flag = 1;
            } else if (obstacleGrid[i][0] == 0 && flag == 0)
                dp[i][0] = 1;
            else if (obstacleGrid[i][0] == 0 && flag == 1)
                dp[i][0] = 0;
            else
                dp[i][0] = -1;

        }
        flag = 0;
        for (int i = 0; i < n; i++) {
            if (obstacleGrid[0][i] == 1 && flag == 0) {
                dp[0][i] = -1;
                flag = 1;
            } else if (obstacleGrid[0][i] == 0 && flag == 0)
                dp[0][i] = 1;
            else if (obstacleGrid[0][i] == 0 && flag == 1)
                dp[0][i] = 0;
            else
                dp[0][i] = -1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (obstacleGrid[i][j] == 1)
                    dp[i][j] = -1;
                else {
                    if (dp[i - 1][j] < 0 && dp[i][j - 1] < 0)
                        dp[i][j] = 0;
                    else if (dp[i - 1][j] < 0)
                        dp[i][j] = dp[i][j - 1];
                    else if (dp[i][j - 1] < 0)
                        dp[i][j] = dp[i - 1][j];
                    else
                        dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        if (dp[m - 1][n - 1] < 0)
            return 0;
        return dp[m - 1][n - 1];
    }
}

时间复杂度 O ( m × n ) O(m × n) O(m×n)
空间复杂度 O ( m × n ) O(m × n) O(m×n)



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

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

相关文章

Linux内核之Binder驱动container_of进阶用法(三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LeetCode 双指针专题

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不…

java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 广度优先双分裂蛇 广度优先双分裂蛇 双分裂蛇&#xff1a;是求二…

HCIA-Datacom实验_04_实验二:IPv4编址及IPv4路由基础实验

一、拓扑 二、改名 R1 R2 R3 三、配置接口IP R1 R2 R3 四、查看路由表 此时每台设备上会有两条直连路由 R1 R2 R3 五、ping测试 R1pingR2接口 R1pingR3接口 R2pingR1接口 R2pingR3接口 R3pingR1接口 R3pingR2接口 六、配置LoopBack地址 R1 R2 R3 七、写路由 R1到R2的Loo…

吴恩达2022机器学习专项课程(一) 4.1 梯度下降

问题预览 梯度下降算法的作用是&#xff1f;梯度下降的过程&#xff1f;梯度下降和最小化成本函数的联系&#xff1f;所有的成本函数都是一个形状吗&#xff1f;在非凸形状中&#xff0c;梯度下降的更新过程是&#xff1f;在非凸形状中&#xff0c;不同的初值对最小化成本函数…

C++:数据类型—布尔(12)

布尔类型代表就是真和假&#xff08;bool&#xff09; 真就是1&#xff08;true&#xff09; 假就是0&#xff08;false&#xff09; 也可以任务非0即为真 bool 直占用1个字节大小 语法&#xff1a;bool 变量名 (true | false&#xff09; 提示&#xff1a;bool在后期判断也是…

扫描体的概念、应用及实现方法

扫描体&#xff08;Swept Volume&#xff0c;简称SV&#xff09;&#xff0c;从广义上来说&#xff0c;是指以任一对象&#xff08;几何模型或曲面集&#xff09;为扫描母体&#xff0c;沿着空间任一路径&#xff08;扫描路径&#xff09;&#xff0c;以某种方式运动最终产生的…

软考高级架构师:安全模型概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

TC16-161T+ 音频 信号变压器 RF Transformers 600kHz-160MHz 射频集成电路 Mini-Circuits

Mini-Circuits是一家全球领先的射频、微波和毫米波元器件及子系统制造商。TC16-161T是Mini-Circuits出产的一款射频IC&#xff08;射频集成电路&#xff09;&#xff0c;具有平衡-不平衡转换器功用。制造商: Mini-Circuits 产品品种: 音频变压器/信号变压器 RoHS…

一篇文章带你了解Java网络原理

网络发展史 独立模式 独立模式:计算机之间相互独立; ⽹络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同⼯作来完成业务&#xff0c;就有了⽹络互连。 ⽹络互连&#xff1a;将多台计算机连接在⼀起…

初步了解JavaSE

目录 前言&#xff1a; 一、Java SE主要包含模块&#xff1a; 二、JavaSE的环境搭建 三、JavaSE简单入门 1&#xff09;文件名称不对&#xff0c;如果有一个叫 helloworld.java&#xff0c;但是class命名为HelloWord. 2&#xff09;如果希望我们文件名称和类名不一致&…

习题2-5 求平方根序列前N项和

本题要求编写程序&#xff0c;计算平方根序列 的前N项之和。可包含头文件math.h&#xff0c;并调用sqrt函数求平方根。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S&#xff0c;精确到小数点后两位。题目保证计算结果不…

docker 共享网络的方式实现容器互联

docker 共享网络的方式实现容器互联 本文以nacos连接mysql为例 前提已经在mysql容器中初始化好nacos数据库&#xff0c;库名nacos 创建一个共享网络 docker network create --driver bridge \ --subnt 192.168.0.0/24 \ --gateway 192.168.0.1 mynet此处可以不指定网络模式、…

【QT+QGIS跨平台编译】045:【netcdf3+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、NetCDF3介绍二、文件下载三、文件分析四、pro文件五、编译实践一、NetCDF3介绍 NetCDF(Network Common Data Form)是一种用于存储科学数据的文件格式和库。NetCDF3 是 NetCDF 的旧版本,通常指的是 NetCDF 版本 3.x。 以下是 NetCDF3 的一些特…

速腾聚创上市后首份财报:冲击年销百万台,押注人形机器人

作者 |老缅 编辑 |德新 港股「激光雷达第一股」速腾聚创&#xff0c;交出了上市后的首份业绩报告。 3月27日&#xff0c;速腾聚创发布了2023年度财报。 报告期内&#xff0c;公司迎来高速的业务增长——2023年总收入达到人民币11.2亿元&#xff0c;同比增长达到111.2%。这主…

算法学习——LeetCode力扣动态规划篇9

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

CCPC2020 - 秦皇岛 - G. Good Number (数学)

亚历克斯喜欢数字。 亚历克斯认为&#xff0c;正整数 x x x 是好数&#xff0c;当且仅当 ⌊ x k ⌋ \lfloor \sqrt[k]{x} \rfloor ⌊kx ​⌋ 整除 x x x 。 你能告诉他不超过 n n n 的正整数的个数吗&#xff1f; 输入 输入的第一行给出了测试用例的数量 T ( 1 ≤ T ≤…

Pytorch 下载失败原因

错误信息&#xff1a; ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distribution found for torch 解决方案&#xff1a; 在官网看到&#xff0c;它需要python3.8-3.11的环境。过高和过低的版本都不…

python学习16:python中的布尔类型和条件语句的学习

python中的布尔类型和条件语句的学习 1.布尔&#xff08;bool&#xff09;类型的定义&#xff1a; 布尔类型的字面量&#xff1a;True表示真&#xff08;是、肯定&#xff09; False表示假&#xff08;否、否定&#xff09; True本质上是一个数字记作1&#xff0c;False记作0 …

208基于matlab的多目标遗传算法的无人机航路规划

基于matlab的多目标遗传算法的无人机航路规划。在三维航路中进行航路代价估计&#xff0c;综合考虑路径长度、隐蔽性、危险度&#xff0c;规划出最优路径。输出3D规划路径。程序已调通&#xff0c;可直接运行。 208 多目标遗传算法 无人机航路规划 - 小红书 (xiaohongshu.com)