【动态规划】斐波那契数列模型_解码方法_C++(medium)

news2024/11/28 12:37:04

题目链接:leetcode解码方法


目录

题目解析:

算法原理

1.状态表示

2.状态转移方程

3.初始化

4.填表顺序

5.返回值

编写代码


题目解析:

题目让我们求解码 方法的 总数

由题可得:

0和有前导0(比如06、08、04)的都不能解码;

我们先用实例来分析题目:

实例一:s=“1 2”

那么1和2可以单独解码;

也可以是两个一起‘12’解码;

所以这里解码方法为2;

实例二:s=“0 6”

这里0不能解码,06也不能解码

所以这里解码方法为0;


算法原理:

1.状态表示

先创建一个dp表

首先先思考dp表里面的值所表示的含义(是什么?)

dp[i]表示到i位置一共有多少种解码方法;

这种状态表示怎么来的?

1.经验+题目要求

经验:以i位置为结尾,

题目让我们求解码总数,那么这里我们可以dp[i]来表示。

2.状态转移方程

dp[i]等于什么?

用之前或者之后的状态,推导出dp[i]的值;

根据最近的最近的一步,来划分问题

这里我们分两种情况:

情况一:i位置单独解码;

1.解码成功

当s[i]不等于0时,就可以解码;

此时只要在dp[i-1]的方法后面加上一步就可以;

比如:1 2 1 3 4

1 2 1 3--->1 2 1 3 4

此时i位置的方法数为dp[i-1];

2.解码失败

当s[i]等于0时,解码失败;

解码方法为0;

情况一:i与i-1位置解码;

1.解码成功

当10<=s[i-1]*10+s[i]<=26时,就可以解码;

这里因为不能是06、04等这种有前导0的,所以这里的s[i-1]*10+s[i]一定要大于等于10;

此时i位置的方法数为dp[i-2];

2.解码失败

当【10<=s[i-1]*10+s[i]<=26】不是这个范围时,解码失败;

综上,状态转移方程:

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

3.初始化

(保证填表的时候不越界)

由状态转移方程得:

在i=0、1的时候越界,所以这里要对这两个数初始化;

这里还要注意处理一下边界问题:

当s只有一个数的时候,就直接返回dp[0]就好了。

4.填表顺序

(为了填写当前状态的时候,所需要的状态已经计算过了)

这里所需要的状态是:dp[i-1]、dp[i-2]

这几个数都是在i之前的,

所以我们这里是从左向右填表;

5.返回值

(根据题目要求和状态表示)

综上分析:

返回值为:dp[n-1]


编写代码:

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

    int n=s.size();
    vector<int> dp(n);

    if(s[0]!='0')
        dp[0]=1;
    else
        return 0;
    //处理边界情况
    if(n==1)
    {
        return dp[0];
    }
    
    if(s[1]!='0')
        dp[1]+=1;
    int cnt=(s[0]-'0')*10+(s[1]-'0');
    if(cnt<=26&&cnt>=10)
        dp[1]+=1;

    for(int i=2;i<n;i++)
    {
        if(s[i]!='0')
            dp[i]+=dp[i-1];

        int cnt=(s[i-1]-'0')*10+(s[i]-'0');
        if(cnt<=26&&cnt>=10)
            dp[i]+=dp[i-2];
 

    }

    return dp[n-1];


    }
};

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

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

相关文章

玄子Share-CSS3 弹性布局知识手册

玄子Share-CSS3 弹性布局知识手册 Flexbox Layout&#xff08;弹性盒布局&#xff09;是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局&#xff0c;最重要的一个概念就是主轴与…

JMS(Java Message Service)使用指南

介绍 JMS即Java消息服务&#xff08;Java Message Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面向消息中间件&#xff08;MOM&#xff09;的API&#xff0c;用于在两个应用程序之间&#xff0c;或分布式系统中发送消息&#xff0c;进行异步通信。它是一…

Linux6-配置网络、源码包的编译和安装

配置 linux 网络 配置主机名 修改/etc/hostname 配置文件&#xff0c;永久配置主机名 [rootlocalhost ~]# vim /etc/hostname svr7.tedu.cn [rootlocalhost ~]# cat /etc/hostname svr7.tedu.cn [rootlocalhost ~]# reboot #重启生效命令行永久修改主机名 [rootlocalhost ~…

四. 基于环视Camera的BEV感知算法-DETR3D

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Cam…

MySQL- in(集合) 和 not in(...) 的使用和练习

1. 基础用法 mysql中in常用于where表达式中&#xff0c;其作用是查询某个范围内的数据。 select * from where field in (value1,value2,value3,…) 当 IN 前面加上 NOT 运算符时&#xff0c;表示与 IN 相反的意思&#xff0c;即不在这些列表项内选择 select * from where …

dlib是什么?

dlib C Libraryhttp://dlib.net/ dlib是什么&#xff1f; Dlib is a modern C toolkit containing machine learning algorithms and tools for creating complex software in C to solve real world problems. It is used in both industry and academia in a wide range of…

若依vue-新建目录及菜单

前面我们把标题和logo换成了自己系统的标题和logo了 接下来就是要建立自己需要的菜单和页面 新建目录解析 在拉下来的代码跑起来后 有一个系统菜单--菜单管理(如图) 在这个菜单的这个页面内有对应的操作功能 修改功能 这个功能可以修改写好了的菜单数据 例如:名称/排序/路由…

Leetcode—337.打家劫舍III【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—337.打家劫舍III 算法思想 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…

【Qt开发流程】之容器类2:使用STL风格迭代器进行遍历

概述 对于每个容器类&#xff0c;都有两种stl风格的迭代器类型:一种提供只读访问&#xff0c;另一种提供读写访问。应该尽可能使用只读迭代器&#xff0c;因为它们比读写迭代器快。 STL迭代器的API以数组中的指针为模型。例如&#xff0c;操作符将迭代器推进到下一项&#xf…

Leetcode刷题笔记题解(C++):25. K 个一组翻转链表

思路&#xff1a;利用栈的特性&#xff0c;K个节点压入栈中依次弹出组成新的链表&#xff0c;不够K个节点则保持不变 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <stack> class Solution { …

OpenAI承认ChatGPT变懒惰,正在修复该问题

OpenAI旗下的官方ChatGPT账号在社交平台表示&#xff0c;已经收到了大量用户关于GPT-4变懒惰的反馈。 这是因为自11月11日以来&#xff0c;OpenAI就没有更新过该模型。当然这不是故意的&#xff0c;大模型的行为是不可预测的&#xff0c;正在研究修复该问题。 外界猜测&#x…

AirServer Mac7.27中文破解2024最新图文安装激活教程含许可证

AirServer Mac 7.27中文破解是一款便捷式投屏软件&#xff0c;它的主要功能在于实时地将移动设备上的图像画面内容投放到电脑设备上&#xff0c;让电脑成为iPad、iPhone等iOS系统设备的大屏显示器。 在设备之间建立局域网内的信号发送与接收通道&#xff0c;确保数据可以稳定安…

(JAVA)-IO流-序列化流

序列化流&#xff1a;能把java的对象写到本地文件中 构造方法 public class test {public static void main(String[] args) throws IOException {student snew student("邓子",19);ObjectOutputStream oosnew ObjectOutputStream(new FileOutputStream("D:\\a…

LAMP和分离式LNMP部署

目录 一.什么是LAMP&#xff1f; 二.安装LAMP 先安装apache&#xff0c;httpd网页服务&#xff1a; 接着安装mysql&#xff1a; 安装php&#xff1a; 创建论坛&#xff1a; 三.安装分布式LNMP&#xff1a; 先安装nginx&#xff1a; 到另一台主机安装php&#xff1a; …

我有才专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

在当今数字化时代&#xff0c;知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。因此&#xff0c;我们提出了专属定制适合个人的知识付费平台的概念&…

win11 CUDA(12.3) + cuDNN(12.x) 卸载

win11 CUDA&#xff08;12.3&#xff09; cuDNN&#xff08;12.x&#xff09;卸载 信息介绍卸载 信息介绍 本文是对应 win11RTX4070Ti 安装 CUDA cuDNN&#xff08;图文教程&#xff09; 的卸载 卸载 控制面板 --> 程序 --> 卸载程序 卸载掉图中红框内的&#xff0c…

题目:纪念品分组(蓝桥OJ 532)

题目描述&#xff1a; 解题思路&#xff1a; 本题使用贪心思想&#xff0c;先排序&#xff0c;则最大和最小就分别位于头部和尾部。如果最大和最小之和不超过容量&#xff0c;就取两个放到一个&#xff08;ans&#xff09;并去除&#xff1b;如果最大和最小之和超过容量&#x…

模型 心流

本系列文章 主要是 分享模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。完全投入其中。 1 心流的应用 1.1 优秀运动员的心流体验 迈克尔乔丹&#xff08;Michael Jordan&#xff09;&#xff1a;篮球之神乔丹在比赛中经常进入心流状态&#xff0c;他曾表示&#xff…

低代码是你得菜吗?传统编程如何应对低代码的挑战?有哪些优秀的低代码平台?

低代码开发是一种越来越受到关注的软件开发方式&#xff0c;它旨在通过简化和加速应用程序开发过程来降低编程门槛。随着技术的进步和对快速交付的需求增加&#xff0c;低代码平台提供了一个快速构建应用程序的环境&#xff0c;无需深入的编程知识&#xff0c;使非专业开发人员…

linux7安装python3.12.1教程

1.下载tar.gz包 地址&#xff1a;Python Release Python 3.12.1 | Python.org 2.上传包到linux服并解压 cd /home/local/ ll tar -zxvf Python-3.12.1.tgz 3.安装编译python所需环境 yum install -y gcc yum install -y zlib* yum -y install zlib-devel bzip2-devel opens…