当前位置: 首页 > backend >正文

动态规划问题 -- 斐波那契数列模型(解码方法)

目录

  • 动态规划问题分析五步曲
  • 题目概述
  • 代码编写

动态规划问题分析五步曲

不清楚动态规划分析问题是哪关键的五步的少年们可以移步到
链接: 动态规划算法基础
这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的

题目概述

链接: 解码方法在这里插入图片描述

1.状态表示(题目要求+自己的经验)
本题状态dp[i] :dp[i]表示以i位置为结尾的子串有多少种编码方法

2.状态转移方程式推导
在这里插入图片描述 前提是要解码成功,如111 0就无法解码成功,11 10可以解码成功
综上所述,得出状态转移方程式
dp[i] = dp[i-1] + dp[i-2] (两种情况都可以解码成功)
dp[i] = 0 + dp[i-2] , dp[i] = dp[i-1] + 0(有一种情况解码不成功)
dp[i] = 0 两种方法均解码失败

3.初始化(防止越界,注意映射关系)
dp[i] = dp[i-1] + dp[i-2] (两种情况都可以解码成功)
当i < 2时就可能会出现数组越界的情况,为了方便后续dp的填表,我们多给dp表开一个头位置
对于dp的状态表示来说是一个无意义的位置,对于字符串S来说,代表的是空串
空串也是有一种解码方法的,那就是解码为空
因此初始化dp[0] = 1;
现在dp[1]表示的是S的第一个字符,即dp[1]表示的是s[0]
只要 1 <= s[0] <= 9 dp[1] = 0

4.填表顺序(分析要填i位置前一个依赖状态的位置)
本题的填表顺序显然是从左到右

5.返回值(状态表示+题目要求)
dp[dp.size()-1] 表示的就是以S的最后一个字符为结尾的解码总数

代码编写

有了动态规划五部曲的分析,咱们就可以写出非常优雅的代码了

 int numDecodings(string s) {int n = s.size();//极端情况,直接歇菜退出if(s[0] - '0' == 0) return 0;else if(n == 1) return 1;//未来dp要多开一个位置,导致dp的i下标对应的是s的i-1下标//我们给s增长一个无意义的位置,让dpi下标对应s的i下标string opt = "-";s = opt + s;vector<int> dp(n+1);dp[0] = 1,dp[1] = 1;  //初始化一下然后从i=2开始遍历for(int i = 2 ; i < dp.size() ; i++){int count = 0;int num = s[i] - '0';int prevnum = s[i-1] - '0';//本位置,自己解码,解码成功与解码失败count +=  num >= 1 && num <= 9 ? dp[i-1] : 0;//本位置,与前面一个位置联合解码,解码成功与解码失败count +=  prevnum != 0 &&   1 <= (prevnum*10 + num) &&   (prevnum*10 + num) <= 26 ? dp[i-2] : 0;dp[i] = count;}return dp[dp.size()-1];}

少年恭喜你又进步了一点点,继续加油吧
在这里插入图片描述

http://www.xdnf.cn/news/2741.html

相关文章:

  • etcd 的安装及使用
  • 软件评测师考点重点知识
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • 一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
  • 大模型训练平台:重构 AI 研发范式的智慧基建
  • MCU内存映射技术详解
  • python数据分析(五):Pandas 数据检索技术
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • openai agents sdk实战-基于Ollama+qwen2.5+milvus+bge-large-zh-v1.5实现本地知识库
  • 在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战
  • 动态规划
  • 在g2o中,顶点(Vertex)和边(Edge)插入到概率图的流程
  • 迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎
  • 如何修复卡在恢复模式下的 iPhone:简短指南
  • 配置管理平台Nacos01:基础安装教程和启动运行
  • 第十五届中国国际道路交通安全产品博览会回顾
  • 2025年ISA Trans SCI2区TOP:超级哈里斯鹰算法Super-HHO+高功率机车悬挂载荷偏差控制,深度解析+性能实测
  • 5G育种技术之植物性状订制
  • 智慧健康养老实训室建设方案:科技引领养老健康服务人才培养
  • 第十六节:开放性问题-Vue与React Hooks对比
  • 使用阿里云 CDN 保护网站真实 IP:完整配置指南
  • Wireshark快速入门--对启动的后端程序进行抓包
  • 杰里芯片 7083G 之通话数据dump
  • Java基础361问第16问——枚举为什么导致空指针?
  • GPU虚拟化实现(五)
  • LeetCode热题100--560.和为K的子数组(前缀和)--中等
  • 自动化测试的三种等待方式
  • 算法笔记.染色法判断二分图
  • mitt 事件发布-订阅库在 react 中的使用
  • 简单理解https与http