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

可视化图解算法79:把数字翻译成字符串(解密数字)

1.题目

描述

有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。

我们把一个字符串编码成一串数字,再考虑逆向编译成字符串。

由于没有分隔符,数字编码成字母可能有多种编译结果,例如 11 既可以看做是两个 'a' 也可以看做是一个 'k' 。但 10 只可能是 'j' ,因为 0 不能编译成任何结果。

现在给一串数字,返回有多少种可能的译码结果

数据范围:字符串长度满足 0 < n≤90

进阶:空间复杂度 O(n),时间复杂度 O(n)

示例1

输入:

"12"

返回值:

2

说明:

2种可能的译码结果(”ab” 或”l”) 注:l为L,并发123的1.    

示例2

输入:

"31717126241541717"

返回值:

192

说明:

192种可能的译码结果    

2. 题解思路

本题的难点是根据题意对数字破译的情况进行细分,大致分为3种情况。

  • 情况1:无法破译的情况。当0的前面不是1或2时,无法译码,0种 (比如:00,30,40等)

  • 情况2:连续的两个数字在11-19,21-26区间之内,破译方法有两种(当前状态由dp[i-1]、dp[i-2]构成);

  • 情况3:不满足情况1、2的时候,破译只有一种,如:10、20、31、86等(当前状态由dp[i-1]构成)。

79-1

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python编码:https://www.bilibili.com/cheese/play/ep1375309
  • Java编码:https://www.bilibili.com/cheese/play/ep1368535
  • Golang编码:https://www.bilibili.com/cheese/play/ep1368735

3.编码实现

核心代码如下:

func solve(nums string) int {// write code here//排除0if nums == "0" {return 0}//排除无法破译的情况for i := 1; i < len(nums); i++ {//当0的前面不是1或2时,无法译码,0种 (比如:00,30,40等)if nums[i] == '0' {if nums[i-1] != '1' && nums[i-1] != '2' {return 0}}}// 1.定义状态.	i:字符串s的下标; dp[i]:s[0:i-1]的编码结果dp := make([]int, len(nums)+1)// 2.初始化边界条件:(类似于跳台阶、爬楼梯等) dp[0]=1; dp[1]=1dp[0] = 1dp[1] = 1// 3.确定递推公式:for i := 2; i <= len(nums); i++ {// 对于11-19,21-26,译码方式有可选择的两种方案;其他只能有一种方案:如01-09、10、20//todo : if 与else if 分开写 主要是便于理解,可以合并if nums[i-2] == '1' && (nums[i-1] > '0' && nums[i-1] <= '9') {//在11-19之间的情况dp[i] = dp[i-1] + dp[i-2] //递推式} else if nums[i-2] == '2' && (nums[i-1] > '0' && nums[i-1] < '7') {//21-26之间的情况dp[i] = dp[i-1] + dp[i-2] //递推式} else {//其他数字,如:10、20、31、86等dp[i] = dp[i-1]}}// 4.输出结果return dp[len(nums)]}

具体完整代码你可以参考下面视频的详细讲解。

  • Python编码:https://www.bilibili.com/cheese/play/ep1375309
  • Java编码:https://www.bilibili.com/cheese/play/ep1368535
  • Golang编码:https://www.bilibili.com/cheese/play/ep1368735

4.总结

本题的难点是对破译数字的情况细分,很容易漏掉,要特别留意。如果对破译的情况细分了解之后,在套用动态规划模板就很容易了。

破译的情况进行细分,大致分为3种情况。

  • 情况1:无法破译的情况。当0的前面不是1或2时,无法译码,0种 (比如:00,30,40等)

  • 情况2:连续的两个数字在11-19,21-26区间之内,破译方法有两种(当前状态由dp[i-1]、dp[i-2]构成,因此dp[i]=dp[i-1]+dp[i-2]);

  • 情况3:不满足情况1、2的时候,破译只有一种,如:10、20、31、86等(当前状态由dp[i-1]构成,因此dp[i]=dp[i-1])。

分割线

《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:https://www.bilibili.com/cheese/play/ss897667807
  • Java编码实现:https://www.bilibili.com/cheese/play/ss161443488
  • Golang编码实现:https://www.bilibili.com/cheese/play/ss63997

对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:不积跬步,无以至千里;不积小流,无以成江海。

http://www.jsqmd.com/news/354139/

相关文章:

  • 飞了么 1.10.4 | 新一代戒色APP,助力用户自律与成长,自我激励
  • 从零开始读懂聚类分析:K-Means、肘部法则与轮廓系数的奥秘
  • 综述不会写?千笔AI,备受喜爱的AI论文工具
  • S7 - 1200 Modbus - RTU轮训程序开发漫谈
  • 把“经典”从文本变成“证据”——用可验证的馆藏叙事,重建用户的信任与好奇
  • 容器镜像签名与验证:构建软件供应链安全的信任基石
  • 2026智慧灌溉厂家推荐:河南华普物联科技大棚/果园/自动化/物联网智慧灌溉解决方案 - 品牌推荐官
  • 国内移动互联网更发达?GEO时代这套“经典文本 + 馆藏插画资产”的打法适合吗?
  • 容器取证与应急响应:在动态与消亡中狩猎威胁
  • 实木别墅门生产企业哪个口碑好,熊熊集团榜上有名 - 工业品牌热点
  • 探讨河北润强316不锈钢液压接头靠谱吗,适用于哪些场景 - 工业品网
  • 2026年定制化易燃易爆危险物品仓储推荐,上海凯搏有啥亮点 - 工业设备
  • 用 AI “读心术”——基于 PyTorch 的社交媒体情感分析系统
  • 图书馆“经典原典+馆藏图像”授权业务的创意挖掘(偏落地、偏可卖)
  • 2026年口碑好的聚氨酯保温无缝钢管厂家排行榜,优质品牌大盘点 - myqiye
  • 求推荐杭州知名的别墅空调地暖安装专业公司,价格怎样 - 工业推荐榜
  • 2026年盘扣/建筑钢跳板/雷亚/脚手架钢踏板厂家推荐:江阴中越达五金塑料全系产品供应 - 品牌推荐官
  • 把“经典”从文本变成“证据”:用可验证的叙事,重建信任与好奇
  • 2026年工地照明设备厂家推荐:济宁萨奥机械有限公司,工程/应急/太阳能照明灯车全系解决方案 - 品牌推荐官
  • 2026济宁装修设计公司推荐:安逸装饰设计工程有限公司,新房/别墅/办公室装修及全屋定制实力之选 - 品牌推荐官
  • 2026年浙江推荐金属探测器厂,费用合理且靠谱的厂家排名出炉 - 工业品牌热点
  • 探索 Carsim 与 Simulink 联合仿真下的车辆状态参数估计
  • 2026年玻璃/大型/智能/负压/观赏鱼缸厂家推荐:六如家居鱼缸全系产品解析与选购指南 - 品牌推荐官
  • 2026年搅拌站设备厂家推荐:河南华鑫重工,免基础/水稳/移动/混凝土/砼/稳定土搅拌站全覆盖 - 品牌推荐官
  • 盘点盐城靠谱的高考复读品牌机构,知名高考复读班哪家好 - 工业设备
  • Dify、n8n 还是 Coze?万字长文解析三大主流 AI Agent 平台
  • ai应用工具之deepseek
  • 2026年挖泥船设备厂家推荐:山东永胜疏浚机械,绞吸/射吸/链斗/小型/多功能挖泥船全系列供应 - 品牌推荐官
  • 从 Function Call 到 MCP-> SKILLS:AI Agent 能力扩展的演进之路
  • 解读《ChatGPT 影响下的大脑:使用 AI 助手进行论文写作任务时产生的“认知债”累积》