斐波那契数列模型---解码方法

91. 解码方法 - 力扣(LeetCode)

同理:60也无法解码 

1、状态表示

根据经验 + 题目要求:以i位置为结尾,然后”巴拉巴拉“。则dp[i]表示,以i位置为结尾时,解码方法的总数

2、状态转移方程

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

两种情况:

1、s[i]位置,单独去解码:又分两种情况:解码成功(1 <= s[i] <= 9),解码失败(s[i] == 0)。解码成功:dp[i] 就= dp[i-1];

解码失败:dp[i] = 0。

2、<s[i],s[i-1]>一起解码,又分两种情况:解码成功(10<= <s[i-1],s[i]> <=  26),解码失败(<s[i],s[i-1]> == 00 || <s[i],s[i-1] > 26)。

解码成功:dp[i] = dp[i-2]。

解码失败:dp[i] = 0。

那么最终dp[i] = 两种情况之和

3、初始化

初始化就是为了填表时不要越界。

dp[0] = 1( 1<=s[0] <= 9),或者dp[0] = 0 (s[0] == 0)。 

dp[1] = 0,1,2。(1:只能依次解码或者只能联合解码。2:可以依次解码,也可以联合解码。0:无法解码)。

4、填表顺序:从左往右

5、返回值

dp[s.size()-1]。

class Solution {
public:int exchange(char a,char b)//两个数字一起解码{int sum = (a-'0')*10 + (b-'0');return sum;}int numDecodings(string s) {int n = s.size();vector<int> dp(n);//dp表,所有dp都为0了dp[0] = s[0] != '0';//初始化dp[0],若s[0]可以解码,dp[0] = 1,反之dp[0] = 0;if( n == 1) return dp[0];//边界越界检查if(s[0] != '0' && s[1] !='0') dp[1] +=1;//初始化dp[1],若0,1各自解码,dp[1]+1;int t = exchange(s[0],s[1]);if(t >= 10 && t <= 26) dp[1]+=1;//06这种情况无效,0,1一起解码,dp[1] +1;for(int i = 2;i<n;i++){if(s[i] != '0') dp[i] += dp[i-1];//s[i]单独解码成功,dp[i]+=dp[i-1]。int tt = exchange(s[i-1],s[i]);if(tt >= 10 && tt <= 26) dp[i] += dp[i-2];//s[i-1]和s[i]一起解码成功,dp[i]+=dp[i-2]}return dp[n-1];}
};

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

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

相关文章

YOLOv9独家原创改进|使用DySample超级轻量的动态上采样算子

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、DySample论文摘要 尽管最近的基于内核的动态上采样器如CARAFE、FADE和SAPA取得了令人印象深刻的性能提升&#xff0c;但它们引入了大量的工作量&…

项目解决方案: 实时视频拼接方案介绍(下)

目 录 1.实时视频拼接概述 2.适用场景 3.系统介绍 4.拼接方案介绍 4.1基于4K摄像机的拼接方案 4.2采用1080P平台3.0 横向拼接 4.3纵横兼顾&#xff0c;竖屏拼接 5.前端选择及架设 5.1前端架设原则 5.1.1安装示意图 5.1.2安装调试基本原则 5.2摄像机及支架 5.…

C++面试宝典第34题:整数反序

题目 给出一个不多于5位的整数, 进行反序处理。要求: 1、求出它是几位数。 2、分别输出每一位数字。仅数字间以空格间隔, 负号与数字之间不需要间隔。如果是负数,负号加在第一个数字之前, 与数字没有空格间隔。注意:最后一个数字后没有空格。 3、按逆序输出各位数字。逆序后…

安卓虚拟机ART和Dalvik

目录 一、JVM和Dalvik1.1 基于栈的虚拟机字节码指令执行过程 1.2 基于寄存器的虚拟机 二、ART与Dalvikdex2aotAndroid N的运作方式 三、总结 一、JVM和Dalvik Android应用程序运行在Dalvik/ART虚拟机&#xff0c;并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。 Dalvik…

猫耳语音下载(mediadown)

猫耳语音下载(mediadown) 一、介绍 猫耳语音下载,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。 二、下载地址 下载:猫耳语音下载(mediadown) 百度网盘下载:猫耳语音下载(mediadown) 三、安装教程 将下载的文件解压到D:\xibinhui,D:\Pr…

计算机视觉基础知识(一)--数学基础

向量 线性变换 矩阵 充满数字的表格 矩阵加减法 要满足两个矩阵的行数与列数一致;加法交换律:ABBA 矩阵乘法 要满足A的列数等于B的行数; 单位矩阵 是一个nxn矩阵;从左到右对角线上的元素值为1;其余元素为0;A为nxn矩阵,I为单位矩阵,;单位矩阵在乘法中的作用相当于数字1; 逆矩…

CSS列表属性

CSS列表属性 列表相关的属性&#xff0c;可以作用在 ul、ol、li 元素上。 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul {/* …

SwiftUI中Alert与ActionSheet的集成

在SwiftUI中&#xff0c;Alert和ActionSheet是两个用于显示提示信息和选项的组件。Alert用于显示简单的提示信息&#xff0c;而ActionSheet用于显示多个选项供用户选择。 要在SwiftUI中使用Alert&#xff0c;首先需要在视图中定义一个State属性来存储是否显示Alert&#xff0c…

【js】事件循环之promise的async/await与setTimeout

什么是事件循环 事件循环又叫消息循环&#xff0c;是浏览器渲染主线程的工作方式。 浏览器开启一个永不停止的for循环&#xff0c;每次循环都会从消息队列中取任务&#xff0c;其他线程只需要在合适的时候将任务加入到消息队列的末尾。 过去分为宏任务和微任务&#xff0c;现…

Linux服务器搭建超简易跳板机连接阿里云服务器

简介 想要规范内部连接阿里云云服务器的方式&#xff0c;但是最近懒病犯了&#xff0c;先搞一个简易式的跳板机过渡一下&#xff0c;顺便在出一个教程&#xff0c;其他以后再说&#xff01; 配置方法 创建密钥 登录阿里云&#xff0c;找到云服务器ECS控制台&#xff0c;点击…

keycloak-鉴权用户体系解决方案

一、问题描述 keycloak用户可手动创建&#xff0c;但是在第三方本地服务需要keycloak鉴权时&#xff0c;大多数本地服务是有自己的用户体系的&#xff0c;这个用户体系如何同步给keycloak呢&#xff0c;大概是三个思路&#xff1a; 1、手动将本地服务用户导入keycloak数据库 …

账单怎么记账软件下载,佳易王账单记账汇总统计管理系统软件教程

账单怎么记账软件下载&#xff0c;佳易王账单记账汇总统计管理系统软件教程 一、前言 以下软件以 佳易王账单记账汇总统计管理系统软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 软件特色&#xff1a; 1、功能实用&#xff0c;操作…