91. 解码方法 ——【Leetcode每日刷题】
91. 解码方法
一条包含字母 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 位 的整数。
示例 1:
输入:s = “12”
输出:2
解释:它可以解码为 “AB”(1 2)或者 “L”(12)。
示例 2:
输入:s = “226”
输出:3
解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。
示例 3:
输入:s = “06”
输出:0
解释:“06” 无法映射到 “F” ,因为存在前导零(“6” 和 “06” 并不等价)。
提示:
- 1 <= s.length <= 100
- s 只包含数字,并且可能包含前导零。
思路:(动态规划)
这道题不要往复杂了想,其实一共就是两种情况,一次解码一个字符和一次解码两个字符,dp[i] 就等于这两种情况之和。
dp数组的含义,dp[i] 为前 i 个子字符串 (即从 0 ~ i-1) 一共有多少种编码方式。
递推公式为:
dp[i]=dp[i−1]+dp[i−2]dp[i] = dp[i - 1] + dp[i - 2]dp[i]=dp[i−1]+dp[i−2]
特别需要注意的是:
- 如果 s[i] = 0 ,不能单独解码,只能和前一个组合解码,前一个 s[i-1] 必须是 1 或者 2,否则超出范围无法解码。
- 如果可以前一个字符s[i-1]组合解码,则s[i-1]就不能和s[i-2]在组合了,此时:dp[i] = dp[i -2];
- 如果不能组合解码,则该字符串无法解码。
- 如果 s[i] 不为0,则肯定可以单独解码,能否组合解码,还要判断组合码是否超出边界,或者无法映射。
- 如果 s[i] 可以组合解码则: dp[i] = dp[i - 1] + dp[i - 2] ;
- 不能组合解码则: dp[i] = dp[i - 1] 。
代码:(Java)
public class DecodingWays {public static void main(String[] args) {// TODO Auto-generated method stubString s = "226";System.out.println(numDecodings(s));}public static int numDecodings(String s) {int n = s.length();if(s.charAt(0) == '0')return 0;int []dp = new int[n + 1];dp[0] = dp[1] = 1;for(int i = 1; i < n; i++) {if(s.charAt(i) == '0' && (s.charAt(i - 1) == '1' || s.charAt(i - 1) == '2')) {dp[i + 1] = dp[i - 1];}else if(s.charAt(i) == '0') {return 0;}else if(Integer.valueOf(s.substring(i - 1,i + 1)) < 27 && Integer.valueOf(s.substring(i - 1,i + 1)) > 10) {dp[i + 1] = dp[i] + dp[i - 1];}else {dp[i + 1] = dp[i];}}return dp[n];}
}
运行结果:

复杂度分析
-
时间复杂度:O(n),其中 n 是字符串 s 的长度。
-
空间复杂度:O(n)。使用数组进行状态转移,其中 n 是字符串 s 的长度;
注:仅供学习参考!
题目来源:力扣。
相关文章:
91. 解码方法 ——【Leetcode每日刷题】
91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> “1” ‘B’ -> “2” … ‘Z’ -> “26” 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法࿰…...
人体存在传感器成品方案,精准感知静止存在,实时智能化感控技术
随着现今智能时代的发展,酒店也越来越趋于智能化,也在不断地推行智慧酒店,这也给人们入住酒店提供了良好的体验。 人体存在感知是智能酒店中极其重要的一项应用技术,只有智能设备通过精准地感知人体存在,才能更好地做…...
mysql连接池的实现
目录 1 池化技术 2 什么是数据库连接池 3 为什么使用数据库连接池 3.1 不使用连接池 3.2 使用连接池 3.3 长连接和连接池的区别 4 数据库连接池运行机制 5 连接池和线程池的关系 6 线程池设计要点 6.1 连接池设计逻辑 构造函数 初始化 请求获取连接 归还连接 析…...
哪种类型蓝牙耳机佩戴最舒服?舒适度最好的蓝牙耳机推荐
如果您想在外出时听自己喜欢的音乐,您需要佩戴耳机,当前的耳机都足够小,可以将它们放在口袋里,即使它们在充电盒中也是如此,舒适度一直都是人们所追求的,舒适之余,佩戴同样稳固更加令人安心&…...
2020蓝桥杯真题洁净数 C语言/C++
题目描述 小明非常不喜欢数字 2,包括那些数位上包含数字 2 的数。如果一个数的数位不包含数字 2,小明将它称为洁净数。 请问在整数 1 至 n 中,洁净数有多少个? 输入描述 输入的第一行包含一个整数 n(1≤n≤10^6)。 输出描述 输…...
【随笔二】useReducer详解及其应用场景
前言 useReducer 实际上是 useState 的升级版,都是用来存储和更新 state,只是应用的场景不一样。 一般情况下,我们使用 useState 就足够项目需要了,不多当遇到以下场景时,使用useReducer 会更好些 。 状态逻辑复杂&…...
打怪升级之istringstream介绍
istringstream类 istringstream本质不是类,是一个宏,或者说是一个流: typedef basic_istringstream<char> istringstream;istringstream从basic_istringstream的char专用项而来。这一部分让人看得摸不着头脑的原因是因为大量使用了st…...
系统重装漏洞
zzcms系统重装漏洞 一、配置zzcms环境 1. 使用小皮搭建zzcms框架 2. 安装zzcms 按照下面的操作进行,傻瓜式操作即可 3. 打开网站 二、漏洞利用 在访问install目录的默认文件后,会出现zzcms安装向导 http://www.zzcms.com/install/index.php 但是会显示 “安装向导…...
C++面向对象编程之五:友元(friend)
C中,允许一个类的非共有成员被这个类授予友元(friend)关系的全局函数,另一个类,或另一个类中的成员函数访问。友元不是一个类中的成员,所以它们不受声明出现部分的访问权限(public,p…...
[手写OS]动手实现一个OS 之X86实模式下的汇编开发
[手写OS]动手实现一个OS 之X86实模式下的汇编开发 x86实模式下 汇编开发是一个 intel x86实模式中的汇编程序开发类型。它涉及操纵几个16位处理器寄存器,并仅处理内存中的物理地址(与受保护模式相对)。 这种类型的编程中最广为人知的应用就…...
【Linux内核二】常用的网络丢包错包debug工具介绍
目录 ifconfig Ifconfig输出各字段简述 txqueuelen RX和TX的errors指哪些错误 dropped与overruns的区别 常用ifconfig配置命令 显示网卡信息 启动关闭指定网卡 配置和删除ip地址 修改MAC地址 启用和关闭ARP协议 设置最大传输单元 设置网卡的promiscuous模式 设置…...
qt控件增加渐变色效果
ui->returnBtn->setStyleSheet("color: rgb(0, 0, 0);""background:qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, ""stop:0 #5f5f5f, stop:0.5 #ffffff, stop:0.98 #5f5f5f);""border:none;");效果如下图: …...
【node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 最全面有效的解决方案】
执行nodejs文件错误: 这个错误提示通常是由于你的系统无法识别 "node" 命令,可能是由于你没有正确地安装或配置 Node.js 环境变量。 问题描述 原因分析: 可能原因包括: 1.Node.js未正确安…...
打怪升级之字符串的分界符与字符串替换
流的字符串分界符 在C的iostream中,有流的字符串分界符: " “和”"都代表简单的分隔。 因此,使用流来做字符串分隔的话,有一个比较简单的方案就是将原定义的分隔符通过替换的方式变成流的分隔符。然后再录入流中就能…...
载荷台子使用方式
载荷自动测量台子使用方法 电源开关旋转到1,开启电源开启台子微机开关,开启电脑(winxp)开启台子载荷开关,启动载荷台子点击电脑动标图标,开启软件放入载荷,弹性体向上,载荷台子压头压…...
1005 继续(3n + 1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候,我们需要计算 3、5、8、4、2、1&a…...
VMware15配置NAT模式联通网络
最近为了测试C# 开发的桌面应用程序悬浮球的兼容性,在虚拟机上安装了win7系统和xp系统,之前也安装过黑苹果系统,但是win系统倒是第一次安装,在win7系统联网的时候,踩了一些坑,整理纪录一下。 设置主物理机配…...
doPost的实际使用
目录 前言 一、doPost是什么? 二、使用步骤 1.doPost的请求方法 2.需要引入依赖 总结 前言 本章主要记录一下doPost的请求公用方法的使用。 一、doPost是什么? 它其实就是一个http的post请求方式。 二、使用步骤 1.doPost的请求方法 当我们系…...
2017年MathorCup数学建模A题流程工业的智能制造解题全过程文档及程序
2017年第七届MathorCup高校数学建模挑战赛 A题 流程工业的智能制造 原题再现: “中国制造 2025”是我国制造业升级的国家大战略。其技术核心是智能制造,智能化程度相当于“德国工业 4.0”水平。“中国制造 2025”的重点领域既包含重大装备的制造业&…...
HNU-电子测试平台与工具2-数模转换
数模转换实验 计科XXXX wolf 工程文件我也一并上传了 D级任务 一.实验任务 对74194进行仿真验证,掌握Quartus仿真的基本原则和常规步骤,记录移位寄存器的数据读写,并描述仿真波形,分析结果。 二.实验过程 1.电路连接 2.功能…...
智慧电子元器件识别 电子废弃物场景下的物料分类与元器件识别 元器件分拣数据集 电子废弃物自动分拣 电容数据集 保险丝数据集 第10617期
电子废弃物分类与元器件检测数据集 README 项目概述 本数据集专注于电子废弃物场景下的物料分类与元器件识别任务,为固废资源化利用、智能拆解及环保检测领域提供高质量标注数据,助力电子废弃物的高效回收与无害化处理。核心数据信息维度内容数据类别共1…...
springboot-vue+nodejs大学生社团管理系统
目录技术栈选择系统模块划分开发阶段安排部署与优化测试重点项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Spring Boot框架,提供RESTful API接口,处理业务逻辑与数据库交互。 前端…...
OpenClaw对接Qwen3-VL:30B:个人AI助手搭建全指南
OpenClaw对接Qwen3-VL:30B:个人AI助手搭建全指南 1. 为什么选择这个组合? 去年冬天,我偶然在GitHub上发现了OpenClaw这个项目。当时我正在为团队寻找一个既能处理文档又能执行自动化任务的解决方案。试过几个商业产品后,要么功能…...
RC522 RFID模块SPI驱动开发与寄存器级控制实践
1. RC522 RFID读写模块底层技术解析与嵌入式驱动开发实践1.1 模块硬件架构与通信协议基础RC522 是 NXP(恩智浦)推出的高度集成非接触式射频识别(RFID)读写芯片,广泛应用于门禁系统、公交卡读取、物流追踪等嵌入式场景。…...
颠覆式开源工具GHelper:极简华硕笔记本硬件控制解决方案
颠覆式开源工具GHelper:极简华硕笔记本硬件控制解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...
LeetCode 283. Move Zeroes 题解
LeetCode 283. Move Zeroes 题解 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输…...
3分钟掌握视频转PPT终极技巧:快速提取幻灯片内容
3分钟掌握视频转PPT终极技巧:快速提取幻灯片内容 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 还在为会议录屏中的PPT幻灯片提取而烦恼吗?extract-video-pp…...
实战数据结构:利用快马ai一键生成c语言指针实现的链表完整代码
实战数据结构:利用快马AI一键生成C语言指针实现的链表完整代码 指针是C语言的灵魂所在,尤其在实现链表、树等动态数据结构时,指针操作更是不可或缺的核心技能。最近在完成数据结构课程作业时,我尝试用InsCode(快马)平台的AI辅助功…...
一文搞懂:Agent、Harness Engineering、MCP、Skill 到底是什么
🧭 你是否被这些词搞晕过? Agent Harness Engineering MCP Skill Tool Workflow…… 大模型时代,新概念层出不穷。它们分别是什么?又如何协同工作? 这篇文章是你的概念地图。 大模型生态:四个核心概…...
FastAPI速率限制:Redis分布式实现的终极指南
FastAPI速率限制:Redis分布式实现的终极指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI作为高性能的现代Web框…...
