代码学习第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;elsedp[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;elsedp[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];elsedp[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)



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

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

相关文章

Canvas实现圆点动画

示例效果图&#xff1a; 话不多说直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

Unity类银河恶魔城学习记录11-10 p112 Items drop源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemObject_Trigger.cs using System.Collections; using System.Collecti…

P28—P31:变量

P28-变量的定义 什么是变量&#xff1f; 从本质上来说&#xff0c;变量就是一块内存空间&#xff0c;而这块内存空间有数据类型、名字、字面值。变量包含三部分&#xff1a;数据类型、名字、字面值&#xff08;数据&#xff09;变量是内存中存储的基本单元。 数据类型的作用&a…

Linux 查看磁盘信息:df与du命令详解

一、df 1.简介 df 是 disk free的缩写&#xff0c;从UNIX和类UNIX操作系统的早期开始&#xff0c;它就是UNIX和类UNIX操作系统的一部分。它被设计为一种工具&#xff0c;用于监视系统上已使用和可用的磁盘空间数量。 df 命令主要用于需要检查文件系统上已使用和可用的磁盘空…

第十三届蓝桥杯JavaA组省赛真题 - GCD

解题思路&#xff1a; 找规律 最大的最小公因数就是两数的差值 5 7 gcd2 1 3 gcd2 1 4 gcd3 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);long a scan.nextLong();long b scan.ne…

查找--二分查找(Binary Search)

二分查找属于静态查找表&#xff0c;当以有序表表示静态查找表时&#xff0c;查找函数可用折半查找来实现。 查找过程&#xff1a;先确定待查记录所在的范围&#xff08;区间&#xff09;&#xff0c;然后逐步缩小范围直到找到或找不到该记录为止。 以处于区间中间位置记录的…

Linux appimage如何正确打开

在之前的文章中&#xff0c;提到使用appimage软件非常方便。 但是首次使用会遇到这样的问题&#xff1a; 1. 双击打不开 2. 在终端打开提示&#xff1a; /home/roy/software/appimage/Obsidian-1.5.11.AppImage dlopen(): error loading libfuse.so.2 AppImages require …

Python下载bing每日壁纸并实现win11 壁纸自动切换

前言: 爬虫哪家强,当然是python 我是属于啥语言都用,都懂点,不精通,实际工作中能能够顶上就可以。去年写的抓取bing每日的壁纸&#xff0c;保存到本地&#xff0c;并上传到阿里云oss&#xff0c;如果只是本地壁纸切换&#xff0c;存下来就行&#xff0c;一直想做个壁纸站点&…

vuees6新语法

vue的学习网站&#xff1a; https://www.runoob.com/vue2/vue-tutorial.html1.Vue的介绍 学习目标 说出什么是Vue能够说出Vue的好处能够说出Vue的特点 内容讲解 【1】Vue介绍 1.vue属于一个前端框架&#xff0c;底层使用原生js编写的。主要用来进行前端和后台服务器之间的…

CubeIDE 下如何将版本号和日期关联。

1. 使用__DATE__ 和__TIME__获取编译日期和时间。 2. 将__DATE__ 和__TIME__转换成UINT 3. 将转换后的数赋值给版本号。 4. 设置工程保证每次都会重新编译对应文件。 对应函数如下&#xff1a; uint8_t VER_MAIN; uint8_t VER_SUB; uint8_t VER_MIN; #include <stdlib.…

我为什么愿意当韭菜

这几年&#xff0c;为了提升自己&#xff0c;我给无数的我认为优秀的人和课付过费。但我从来不认为自己有被割过韭菜。 如果非要说是韭菜&#xff0c;那我认为这个社会每个人都是韭菜&#xff0c;就看是甘愿被割&#xff0c;还是不甘愿。没办法&#xff0c;只有被割才能获得自己…

Python|OpenCV-实现检测人脸以及性别检测(12)

前言 本文是该专栏的第13篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 性别检测是计算机视觉领域里面的一个重要学习领域,简单的来说,它可以实现自动识别一张图片中的人物性别。为此在本文中,笔者将结合OpenCV和Tensorflow来实现对一张图进行“图片中的人物人…

PTA L2-043 龙龙送外卖

龙龙是“饱了呀”外卖软件的注册骑手&#xff0c;负责送帕特小区的外卖。帕特小区的构造非常特别&#xff0c;都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树&#xff0c;根结点是外卖站&#xff0c;树上的结点就是要送餐的地址。 每到中午 12 点&#…

OSCP靶场--Access

OSCP靶场–Access 考点( 文件上传[黑名单apache.htaccess绕过] Kerberoasting SeManageVolume滥用提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.187 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-3…

高端的电子画册,手机打开你见过吗?

手机阅读的高端电子画册&#xff0c;你见过吗&#xff1f;随着移动互联网的发展&#xff0c;越来越多的人选择在手机上阅读电子画册&#xff0c;而不是传统的纸质画册。这种趋势不仅节省了纸张资源&#xff0c;还提升了阅读体验。用户可以通过触摸屏幕、放大缩小、翻页等操作与…

腾讯研发部分编程题汇总做题笔记---Java

朋友圈(后端开发卷) 现在有 105 个用户&#xff0c;编号为 1- 105&#xff0c;现在已知有 m 对关系&#xff0c;每一对关系给你两个数 x 和 y &#xff0c;代表编号为 x 的用户和编号为 y 的用户是在一个圈子中&#xff0c;例如&#xff1a; A 和 B 在一个圈子中&#xff0c; B…

【C++】标准库类型string

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 string类简介 在实际开发中会经常使用字符串,所谓的字符串就是指一连串的字符,它由许多单个字符连接而成。字符串中可以包含任意任意字符,这些字符必须包含在一对英文双引号( " …

论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测

整理了ICMR2023 Multi-modal Fake News Detection on Social Media via Multi-grained Information Fusion&#xff09;论文的阅读笔记 背景模型实验 背景 在假新闻检测领域&#xff0c;目前的方法主要集中在文本和视觉特征的集成上&#xff0c;但不能有效地利用细粒度和粗粒度…

10.python的字典dict(上)

10.python的字典dict(上) 什么是字典 在计算机科学中&#xff0c;字典是一种数据结构&#xff0c;用于存储键值对&#xff08;key-value pair&#xff09;的集合。每个键值对都由一个唯一的键和一个对应的值组成。字典能够快速地根据键找到对应的值&#xff0c;因此在很多编程…

Linux 常见性能分析方法论介绍(业务负载画像、下钻分析、USE方法论,检查清单)

写在前面 博文内容为 《BPF Performance Tools》 读书笔记整理内容涉及常用的性能调优方法论介绍&#xff1a;业务负载画像下钻分析USE方法论检查清单理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼…