【OJ】动归练习二

个人主页 : zxctscl
如有转载请先通知

题目

  • 1. 91.解码方法
    • 1.1 分析
    • 1.2 代码
  • 2. 62.不同路径
    • 2.1 分析
    • 2.2 代码
  • 3. 63.不同路径 II
    • 3.1 分析
    • 3.2 代码

1. 91.解码方法

在这里插入图片描述

1.1 分析

题目所述就是把一串数字反向解码为字母映射出来,有多少种方法。
题目也说,一个单独的数字可以映射的,但是这个数字前面是0的话就不可以。

来看看题目给的示例:
226就有三种解码方式:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6)
在这里插入图片描述

  1. 以i位置,要求的就是以i位置结尾方法的总数;
  2. 状态表示方程:来找解码到i位置时最近的一步,可以分成两种情况:(1)i这个位置单独解码;(2)i位置和i-1结合一起共同解码。这两种情况都会出现解码失败和成功的情况。
    (1)以i位置单独解码,如果这个数字在1-9之间,就能成功也就是有dp[i-1]种;如果失败就是0;
    (2)i位置和i-1结合一起共同解码,如果这两个数字结合在10-26之间,就解码成功,所以解码成功就是dp[i-2],;解码失败就是0。
    状态表示方程:dp[i]=dp[i-1]+dp[i-2],都是成功时候才加。
  3. 初始化,要把0位置和1位置。以0位置结尾说明就只有一个字符,在1-9之间就成功就是1,如果失败就是0。以1位置进位有三种情况:(1)两个字符都可以单独解码;(2)两个字母合在一起解码成功;(3)前面两种都不存在。它的解码数可能是0,1或者2。
  4. 填表顺序:从左往右
  5. 返回值:这个字符串的解码方式,也就是到字符串i-1位置:dp[i-1]

在这里插入图片描述
优化:处理边界以及初始化问题
多开一个虚拟位置,有什么用呢?
在旧的初始化列表中,初始化dp[1]是比较麻烦的,如果把它放在填表位置就会比较轻松。
在这里插入图片描述

得注意:1. 保证虚拟节点位置值是正确的;2.得注意下标映射关系
当要在新的dp表里面2的结果就要用到0和1位置的值。这里dp[0]=1,要想在2位置解码成功,那么0位置必须是解码成功的。
在新的dp表里面的i统一都对应把位置往后面移动了一位,这里在写代码的时候就得减1。
在这里插入图片描述

1.2 代码

class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n);dp[0]=s[0]!='0';if(n==1)return dp[0];if(s[0]!='0'&&s[1]!='0') dp[1]+=1;int t=(s[0]-'0')*10+s[1]-'0';if(t>=10&&t<=26) dp[1]+=1;for(int i=2;i<n;i++){if(s[i]!='0')dp[i]+=dp[i-1];int t=(s[i-1]-'0')*10+s[i]-'0';if(t>=10&&t<=26) dp[i]+=dp[i-2];}return dp[n-1];}
};

优化后:

class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n+1);dp[0]=1;dp[1]=s[1-1]!='0';for(int i=2;i<=n;i++){if(s[i-1]!='0')dp[i]+=dp[i-1];int t=(s[i-2]-'0')*10+s[i-1]-'0';if(t>=10&&t<=26) dp[i]+=dp[i-2];}return dp[n];}
};

2. 62.不同路径

在这里插入图片描述

2.1 分析

题目要求不能回退,就是不能往左和往上。
如果有3*2个表格:那么到达就有三种情况:
在这里插入图片描述

  1. 状态表示:以i位置为结尾,就是走到i位置有多少种方式。
  2. 状态转移方程:根据最近的一步划分有两种情况:到达[i][j]位置,(1)从上面一个[i-1][j]下来一步;(2)从左边[i][j-1]过来一步
    状态转移方程:dp[i][j]=dp[i-1][j]+dp[i]dp[j-1]。
  3. 初始化,下面这些位置可能会存在越界在这里插入图片描述
    所以可以先初始化这些可能初始化的位置。还可以在外面先虚拟一些空间,让下面这些就不会越界:
    在这里插入图片描述
    这些虚拟空间的值要保证后面填表顺序是正确的,要想填表正确,虚拟空间值设置就是:
    在这里插入图片描述
  4. 填表顺序:从左往右,从上往下
  5. 返回值:看题目要求直接返回dp[m][n]就行

在这里插入图片描述

2.2 代码

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m + 1, vector<int>(n + 1));dp[0][1] = 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][n];}
};

3. 63.不同路径 II

在这里插入图片描述

3.1 分析

题目与上面的类型是相同的,就是多了一个障碍物。
在这里插入图片描述

  1. 状态表示:以i位置为结尾,就是走到i位置有多少种方式。
  2. 状态转移方程:根据最近的一步划分有三种情况:到达[i][j]位置,(1)从上面一个[i-1][j]下来一步;(2)从左边[i][j-1]过来一步;(3)这个位置时障碍物那么就是0,就多加一个判断障碍物就可以了。
    状态转移方程:dp[i][j]=dp[i-1][j]+dp[i]dp[j-1]。
  3. 初始化,下面这些位置可能会存在越界,所以就多开一组虚拟空间,得注意下标的映射。如果是障碍物位置就得对应减一。
    在这里插入图片描述
  4. 填表顺序:从左往右,从上往下
  5. 返回值:看题目要求直接返回dp[m][n]就行

在这里插入图片描述

3.2 代码

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size(),n=obstacleGrid[0].size();vector<vector<int>> dp(m + 1, vector<int>(n + 1));dp[0][1] = 1;for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)if(obstacleGrid[i-1][j-1]==0)dp[i][j] = dp[i - 1][j] + dp[i][j - 1];return dp[m][n];}
};

有问题请指出,大家一起进步!!!

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

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

相关文章

nav仿真(2)

开启仿真和建图 打开第一个窗口启动仿真&#xff1a; source devel/setup.bash export TURTLEBOT3_MODELburger roslaunch turtlebot3_gazebo turtlebot3_world.launch # 启动仿真打开第二个窗口&#xff0c;开始建图&#xff1a; source devel/setup.bash export TURTLEBOT3_…

mysql存储引擎、行锁与索引的关系

一、存储引擎概念介绍 MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎 存储引擎是MySQL将数据存储在文件系统中的存储…

个人网络防范

目录 安全事件频发根源在于背后利益链条 不仅仅是中国 网络安全事件成国际性难题 个人网络信息安全防护 四招来帮忙 首先&#xff0c;预防第一 第二&#xff0c;健康的上网浏览习惯 第三&#xff0c;WiFi安全性 第四&#xff0c;规范的文件处理 黑客攻击无孔不入&…

小程序网络视频组件video经常出现的错误解决

小程序网络视频组件错误 1.错误提示如下 3[渲染层网络层错误] Failed to load media http://www.xxx.net/download/1.mp4#devtools_no_referrer net::ERR_FAILED From server 112.126.62.195(env: Windows,mp,1.06.2401020; lib: 3.3.4)2.解决文章请参考 本文链接&#xff…

隐语技术架构

隐语架构 产品定位 算法层 计算层 密码原语 互联互通–资源层 总结

写了几个难一点的sql

写了几个难一点的sql SELECT bn.id AS book_node_id, t.version_id, bn.textbook_id, s.id AS subject_id, s.stage_id, COUNT( CASE WHEN d.document_type_id 1 AND d.scope IS NULL AND p.document_id IS NOT NULL THEN 1 END ) AS type_1_count, COUNT( CASEWHEN d.docume…

教程1_图像入门

一、读取图像文件 cv2.imread() 是 OpenCV 库中的一个函数&#xff0c;用于读取图像文件。下面是 cv2.imread() 函数的基本介绍和使用方法&#xff1a; 函数定义 cv2.imread(filename, flagscv2.IMREAD_COLOR) 参数 filename&#xff1a;要读取的图像的路径和文件名。flags…

前端理论总结(css3)——三角形/梯形 // 一边固定另一边自适应

三角形/梯形 三角形 width: 0; height: 0; border-top: 40px solid transparent; border-left: 40px solid transparent; border-right: 40px solid transparent; border-bottom: 40px solid #ff0000; 梯形 width: 50px; height: 0; border-bottom: 50px solid red; border-l…

JavaScript typeof运算符使用

typeof NaN 的数据类型是数字对象、数组、null 、日期 的数据类型是 object未定义变量、未赋值变量的数据类型为 undefined typeof "Bill" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN …

数据结构(五)——树与二叉树的应用

5.5 树与二叉树的应用 5.5.1 哈夫曼树 结点的权&#xff1a;有某种现实含义的数值。 结点的带权路径长度&#xff1a;从树的根到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。 树的带权路径长度&#xff1a;树中所有叶结点的带权路径长度之和…

Spring如何解决循环依赖?

Spring中的循环引用 循环依赖&#xff1a;循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在&#xff0c;spring框架依据三级缓存已经解决了大部分的循环依赖 ①一级缓存&#xff1a;单例池…

linux系统------------Mysql数据库介绍、编译安装

目录 一、数据库基本概念 1.1数据(Data) 1.2表 1.3数据库 1.4数据库管理系统(DBMS) 数据库管理系统DBMS原理 1.5数据库系统&#xff08;DBS) 二、数据库发展史 1、第一代数据库 2、第二代数据库 3、第三代数据库 三、关系型数据库 3.1关系型数据库应用 3.2主流的…

【深度学习】Pytorch中实现交叉熵损失计算的方式总结

在PyTorch中&#xff0c;计算交叉熵损失主要有以下几种方式&#xff0c;它们针对不同的场景和需求有不同的实现方式和适用范围&#xff1a; 1. nn.CrossEntropyLoss 类 这是最常用且方便的方法&#xff0c;特别适用于多分类任务。nn.CrossEntropyLoss 实际上是同时完成了 sof…

前端理论总结(css3)——页面布局方法

瀑布流 优点&#xff1a;节省空间&#xff0c;外表美观&#xff0c;更有艺术性 对于触屏设备非常友好&#xff0c;通过向上滑动浏览 用户浏览时的观赏和思维不容易被打断&#xff0c;留存更容易 缺点&#xff1a;用户…

feign demo

直接上代码 AscendKing/springcloud-feign

Saltstack 最大打开文件数问题之奇怪的 8192

哈喽大家好&#xff0c;我是咸鱼。 今天分享一个在压测过程中遇到的问题&#xff0c;当时排查这个问题费了我们好大的劲&#xff0c;所以我觉得有必要写一篇文章来记录一下。 问题出现 周末在进行压测的时候&#xff0c;测试和开发的同事反映压测有问题&#xff0c;请求打到…

一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧

作为一名互联网技术爱好者&#xff0c;我对数据的探索充满热情。在本文中&#xff0c;我将以豆瓣读书为案例&#xff0c;详细介绍如何利用Python爬虫、Pandas和Excel这三大工具&#xff0c;一键化地实现数据采集和存储。豆瓣读书作为一个备受推崇的图书评价平台&#xff0c;拥有…

亮剑AIGC,紫光云能否胜人一筹?

【全球云观察 &#xff5c; 科技热点关注】 扎实创新每一步&#xff0c; 先人一步快人一步。 2023年全球科技行业最火的莫过于生成式AI&#xff0c;即Artificial Intelligence Generated Content。在迈向生成式AI的道路上&#xff0c;虽然说不上千军万马&#xff0c;但是国内…

一文看懂算法交易(一)

国内T0算法哪家强&#xff1f;算法交易费用是多少&#xff1f;算法交易哪些平台好&#xff1f; 最近算力、AI一直都比较火&#xff0c;现在KiMi和语料都已经出世&#xff0c;随着中国金融市场专业化程度和复杂度的提高&#xff0c;交易环节的每一步都对应巨大的增量空间。智能算…

装饰器 篇

文章目录 装饰器classmethod()property()staticmethod() 装饰器 在Python中&#xff0c;装饰器&#xff08;Decorator&#xff09;是一个高级功能&#xff0c;它允许你在不修改函数或类本身代码的情况下&#xff0c;给函数或类动态地添加额外的功能。装饰器本质上是一个接受函…