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

leetcode165.解密数字

题目表述:

这道题目和斐波那契数列以及跳台阶问题十分相似。

斐波那契数列:0、1、1、2、3、5, 8、13、21、34 …… 

leetcode跳台阶问题:1、1、2、3、5, 8、13、21、34.......

这类题目的特点都是第N项的结果等于前两项的和。

但是解密数字不一样,前面几道题目都是无条件的,直接把前两项的和相加就可以了,这个题目不能直接相加,而是需要判断,然后再进行运算。

假设f(i)代表i个数字之前的解,那么新加入一个数字后,需要考虑两种情况,第一种情况这个数字只能单独翻译成一个字母,这种情况下加了也白加,f(i+1) = f(i); 第二种情况就是这个数字还能和第i个数字联合起来翻译成一个字母,比如10~25之间的两位数都可以被翻译成字母。那这种情况下f(i) = f(i-1) + f(i-2)。事实上因为这个地方无论是个位数还是两位数,最多只能翻译成1种字母,如果可以翻译成多种字母,那么就成了f(i) = g(i) * f(i-1) + g(i-1, i) * f(i-2)。

所以有公式f(i) = f(i-1) +f(i-2) 或者 f(i) = f(i-1)。按道理来说,i是大于等于2的,但是这里有个问题

f(0)=1,这是必然的,但是f(1)是1还是2就难说了。所以还要计算f(1) = f(0) + f(-1)

在斐波那契数列和登台阶的问题中,f(-1)都被设定成了0,但是这里设定成0显然是不合适的。按照f(1)的取值和计算公式应该设定成1

代码:

class Solution {
public:int crackNumber(int ciphertext) {if(ciphertext<10)return 1;string src = to_string(ciphertext);// f(i) = g(i) * f(i-1) + g(i-2) * f(i-2)// f(i) = f(i-1) + f(i-2), i>=2// f(2) = f(1) + f(0)// f(1) = f(0) + f(-1)//   ?  =  1 + ?//.  r = q + pint r, p, q;r = 0;p = 1;q = 1;for(int i=1; i<src.size(); ++i){auto pre = src.substr(i-1, 2);if(pre>="10" && pre<="25"){r = p+q;}else{r = q;}p = q;q = r;} return r;}};

这是一条吃饭博客,由挨踢零声赞助。学C/C++就找挨踢零声,加入挨踢零声,面试不挨踢!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 矩阵分析与应用1-矩阵代数基础
  • 热词分析与维度人物构建
  • HarmonyOS Next应用开发之系统概述
  • Flink 提交作业的方式
  • dataX入门
  • 科研绘图系列:R语言双侧条形图(bar Plot)
  • STM32的独立看门狗详解
  • 玄机——第五章 linux实战-CMS01 wp
  • GEE代码实例教程详解:降水量分类分析
  • Memcached 介绍与详解及在Java Spring Boot项目中的使用与集成
  • 开发个人Ollama-Chat--5 模型管理 (二)
  • Java数据结构-链表与LinkedList
  • 触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘
  • 阿里巴巴矢量图标库使用
  • 梯度下降算法的原理
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【node学习】协程
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CODING 缺陷管理功能正式开始公测
  • Consul Config 使用Git做版本控制的实现
  • JavaScript学习总结——原型
  • mysql innodb 索引使用指南
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue全家桶实现一个Web App
  • 不上全站https的网站你们就等着被恶心死吧
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 精彩代码 vue.js
  • -- 数据结构 顺序表 --Java
  • 数据结构java版之冒泡排序及优化
  • 学习HTTP相关知识笔记
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用简单代码看卷积组块发展
  • 智能网联汽车信息安全
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​secrets --- 生成管理密码的安全随机数​
  • (10)ATF MMU转换表
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (vue)页面文件上传获取:action地址
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)EXC_BREAKPOINT僵尸错误
  • (转载)Linux 多线程条件变量同步
  • .bat批处理(六):替换字符串中匹配的子串
  • .cn根服务器被攻击之后
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [20170728]oracle保留字.txt
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——