【动态规划专栏】专题一:斐波那契数列模型--------4.解码方法

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:动态规划专栏
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

专题一

  • 题目来源
  • 题目描述
  • 题目解析
  • 算法原理
    • 1.状态表示
    • 2.状态转移方程
    • 3.初始化
    • 4.填表顺序
    • 5.返回值
  • 代码实现

题目来源

本题来源为:

Leetcode91. 解码方法

题目描述

一条包含字母 A-Z 的消息通过以下映射进行了 编码 :

‘A’ -> “1”
‘B’ -> “2”

‘Z’ -> “26”

要解码已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:

“AAJF” ,将消息分组为 (1 1 10 6)
“KJF” ,将消息分组为 (11 10 6)

注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。

给你一个只含数字的 非空 字符串 s ,请计算并返回解码 方法的总数 。
题目数据保证答案肯定是一个 32 位 的整数
在这里插入图片描述

题目解析

在这里插入图片描述
解码按照规则解码即可,但是前导0不可解码。

算法原理

1.状态表示

经验+题目要求:
以i位置为结尾…

在这里插入图片描述
对于本题而言就是:
dp[i]表示:以i位置为结尾时,解码方法的总数

2.状态转移方程

在推方程之前,我们先画一下解码的情况:
在这里插入图片描述
分为单独解码和与前一个位置一起解码两种情况:
在这里插入图片描述
而单独解码和一起解码又要分为两种情况,成功和失败。
为什么会失败呢?
举个例子:
在这里插入图片描述
2和5可以一起解码,也可以分开解码,但到0位置时,就会解码错误,自己单独不能解码,要是与后面的6结合,
在这里插入图片描述
会出现之前说的前导0情况,也会解码错误。

因此,本题的状态转移方程为:

dp[i] = dp[i-1]+ dp[i-2]

3.初始化

本题初始化要在下标为0位置与下标为1位置进行初始化:
在这里插入图片描述

  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;

4.填表顺序

根据状态转移方程,我们计算dp[i]位置的值需要i-1与i-2位置的值,因此我们的填表顺序为:从左往右

5.返回值

我们要解码到最后一个位置,因此:返回dp[n-1]

代码实现

class Solution 
{
public:
    int numDecodings(string s) 
    {
        // 1.创建dp表
        // 2.初始化
        // 3.填表
        // 4.返回值

        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];
    }
};

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

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

相关文章

blasterswap明牌空投

空投要点 明牌空投&#xff0c;blaster生态第一个swap&#xff0c;应该不会寒酸交互简单&#xff0c;仅需3步&#xff0c;零gas费仅仅要求加密钱包在eth链有过交易需要有x和discord账号 blasterswap空投简介 BlasterSwap 是Blast生态里面第一个SWAP项目&#xff0c;近期启动…

国开电大计算机科学与技术网络技术与应用试题及答案,分享几个实用搜题和学习工具 #媒体#其他#知识分享

这些软件以其强大的搜索引擎和智能化的算法&#xff0c;为广大大学生提供了便捷、高效的解题方式。下面&#xff0c;让我们一起来了解几款备受大学生欢迎的搜题软件吧&#xff01; 1.三羊搜题 这个是公众号 支持文字和语音查题!!! 学习通,知到,mooc等等平台的网课题目答案都…

OpenCV 4基础篇| 色彩空间类型转换

目录 1. 色彩空间基础2. 色彩空间类型2.1 GRAY 色彩空间2.2 BGR 色彩空间2.3 CMY(K) 色彩空间2.4 XYZ 色彩空间2.5 HSV 色彩空间2.6 HLS 色彩空间2.7 CIEL*a*b* 色彩空间2.8 CIEL*u*v* 色彩空间2.9 YCrCb 色彩空间 3. 类型转换函数3.1 cv2.cvtColor3.2 cv2.inRange 1. 色彩空间…

Fiddler与wireshark使用

Fiddler解决三个问题 1、SSL证书打勾&#xff0c;解析https请求 2、响应回来乱码&#xff0c;不是中文 3、想及时中止一下&#xff0c;查看实时的日志 4、搜索对应的关键字 问题1解决方案&#xff1a; 标签栏Tools下 找到https&#xff0c;全部打勾 Actions里面 第一个 t…

怎么在电脑上做工作笔记?电脑桌面电子笔记软件

在繁忙的职场中&#xff0c;随时随地记录工作笔记是许多职场人士的日常需求。这不仅包括了会议记录、项目进展&#xff0c;还有一些灵感、规划和工作要点&#xff0c;都需要随手记下&#xff0c;以便随时查看和回顾。那么我们如何在电脑上做工作笔记更高效、便捷呢&#xff1f;…

文献学习-1-Continuum Robots for Medical Interventions

Chapt 5. 连续体机构分析 5.1 文献学习 5.1.1 Continuum Robots for Medical Interventions Authors: PIERRE E. DUPONT , Fellow IEEE, NABIL SIMAAN , Fellow IEEE, HOWIE CHOSET , Fellow IEEE, AND CALEB RUCKER , Member IEEE 连续体机器人在医学上得到了广泛的应用&a…

爱校对软件——清华大学研发的全能文字处理助手

随着数字化和信息化的深入发展&#xff0c;高效、准确的文字处理工具成为了各行各业的迫切需求。清华大学人机交互实验室推出的“爱校对”软件&#xff0c;作为一款先进的文字处理工具&#xff0c;正逐渐成为专业编辑、写作者、学生、法律从业者、政府工作人员、商业从业者、出…

计算机视觉学习指南(划分为20个大类)

计算机视觉的知识领域广泛而庞杂&#xff0c;涵盖了众多重要的方向和技术。为了更好地组织这些知识&#xff0c;我们需要遵循无交叉无重复&#xff08;Mutually Exclusive Collectively Exhaustive&#xff0c;MECE&#xff09;的原则&#xff0c;并采用循序渐进的方式进行分类…

开发一款招聘小程序需要具备哪些功能?

随着时代的发展&#xff0c;找工作的方式也在不断变得简单&#xff0c;去劳务市场、人才市场的方式早就已经过时了&#xff0c;现在大多数年轻人都是直接通过手机来找工作。图片 找工作类的平台不但能扩大企业的招聘渠道&#xff0c;还能节省招聘的成本&#xff0c;方便求职者进…

Solidworks:钣金的折弯系数、K因子、折弯扣除

在SolidWorks的钣金件设计中&#xff0c;“折弯系数”、“K因子”和“折弯扣除”都是与折弯加工相关的重要参数。 “折弯系数”是一个用于描述金属材料在折弯过程中应力分布非均匀性的指标。它反映了金属板材在弯曲时内外表面应力的分布情况&#xff0c;是判断材料是否适合进行…

音乐与步伐同行:南卡、韶音和墨觉的骨传导耳机深度评测

在快节奏的现代生活中&#xff0c;音乐成为了许多人精神慰藉的方式之一。特别是对于那些热爱运动的人来说&#xff0c;音乐不仅是他们运动过程中的最佳伴侣&#xff0c;更是激发潜力&#xff0c;突破极限的源动力。但是在运动的过程中如何享受到最佳的音乐体验呢&#xff1f;这…

DAY20 结构和其他数据形式(上)【一万六千字超详细】

文章目录 前言14.1 示例问题&#xff1a;创建图书目录14.2建立结构声明14.3定义结构变量14.3.1 初始化结构14.3.2 访问结构成员14.3.2 结构的初始化器 14.4 结构数组14.4.1 声明结构数组14.4.2 标识结构数组的成员 14.3 嵌套结构14.6 指向结构的指针14.6.1 声明和初始化结构指针…

技术选型指南:Oracle、SQL Server还是DB2?

Oracle vs SQL Server vs DB2 - 选哪个好&#xff1f; 在企业级数据管理领域&#xff0c;常用的几个选择有Oracle、SQL Server和DB2。 首先&#xff0c;我们从以下几个方面做一下对比&#xff1a; 1. 性能和稳定性&#xff1a; Oracle: Oracle就像是那种精密的瑞士手表&…

【字符串】【 LCP】【C++算法】2573找出对应 LCP 矩阵的字符串

作者推荐 【深度优先搜索】【树】【有向图】【推荐】685. 冗余连接 II 本文涉及知识点 字符串 LCP LeetCode:2573找出对应 LCP 矩阵的字符串 对任一由 n 个小写英文字母组成的字符串 word &#xff0c;我们可以定义一个 n x n 的矩阵&#xff0c;并满足&#xff1a; lcp[i…

Linux-目录I/O-004

学习重点&#xff1a; 1.目录I/O的函数接口 2.目录的遍历&#xff0c;目录的递归遍历1.【mkdir】 1.1函数原型 【int mkdir(const char *pathname, mode_t mode);】1.2函数功能 创建目录文件1.3函数参数 1.3.1【pathname】 文件路径1.3.2【mode】 文件的权限1.4返回值 …

【软件使用】postman使用教程

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;软件安装及使用 ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 步骤1&#xff1a;安装Postman 步骤2&#xff1a;发送请求 步骤3&#xff1a;管理环境变量 步骤4&#xff1…

全链路压测演进之迭代式压测

1.背景原因 !! 做系统服务压测都是比较耗时耗人力的&#xff0c;特别是在生产环境上做压测&#xff0c;压测的时间都是在晚上23点后&#xff0c;甚至在凌晨1-4点&#xff0c;每次投入的人力成本较高&#xff08;经常是晚上通宵加班压测&#xff0c;疲惫感十足&#xff09;&…

Mybatis常见问题

引言 MyBatis工作原理如下图所示&#xff1a; 1、读取MyBatis配置文件&#xff1a;mybatis-config.xml为MyBatis的全局配置文件&#xff0c;配置了MyBatis的运行环境等信息&#xff0c;例如数据库连接信息。 2、加载映射文件&#xff1a;映射文件即SQL映射文件&#xff0c;该…

Redis部署方式(一)四种部署方式介绍

redis的四种部署方式&#xff1a; Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署&#xff0c;后面三种&#xff08;主从模式&#xff0c;Sentinel哨兵模式&#xff0c;Cluster模式&#xff09;也可以统称为集群模式。 一、单机 1、缺点&…

SG-8018CG晶体振荡器可编程

SG-8018CG 晶体振荡器是一款集宽频率范围、高稳定性、低功耗及超小型封装于一身的高性能时钟源解决方案。是需要在高温环境中运作的复杂电子系统的理想选择。通过SG-Writer II工具的支持&#xff0c;SG-8018CG系列提供了快速、灵活的编程选项&#xff0c;使得它能够迅速适应市场…