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

【中等】数字字符串转换为字母组合的种数-Java:解法二

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter

package live.every.day.ProgrammingDesign.CodingInterviewGuide.RecursionAndDynamicPrograming; /** * 数字字符串转换为字母组合的种数 * * 【题目】 * 给定一个字符串str,str全部由数字字符组成,如果str中某一个或某相邻两个字符组成的子串值在1~26之间,则这个子串可以转换 * 为一个字母。规定"1"转换为"A","2"转换为"B","3"转换为"C"..."26"转换为"Z"。写一个函数,求str有多少种不同的转换结 * 果,并返回种数。 * * 【难度】 * 中等 * * 【解答】 * 以上过程中,p(i)最多可能会有两个递归分支p(i+1)和p(i+2),一共有N层递归,所以时间复杂度为0(2^N),额外空间复杂度就是 * 递归使用的函数栈的大小为O(N)。但是研究一下递归函数p就会发现,p(i)最多依赖p(i+1)和p(i+2)的值,这是可以从后往前进行 * 顺序计算的,也就是先计算p(N)和p(N-1),然后根据这两个值计算p(N-2),再根据p(N-1)和p(N-2)计算p(N-3),最后根据p(1) * 和p(2)计算出p(O)即可,类似斐波那契数列的求解过程,只不过斐波那契数列是从前往后计算的,这里是从后往前计算而己。 * 具体过程请参看如下代码中的num2方法。 * 因为是顺序计算,所以num2方法的时间复杂度为O(N),同时只用了cur、next和tmp进行滚动更新,所以额外空间复杂度为O(1)。 * 但是本题并不能像斐波那契数列问题那样用矩阵乘法的优化方法将时间复杂度优化到O(logN),这是因为斐波那契数列是严格的 * f(i)=f(i-1)+f(i-2),但是本题并不严格,str[i]的具体情况决定了p(i)是等于0还是等于p(i+l),还是等于p(i+1)+p(i+2)。 * 有状态转移的表达式不可以用矩阵乘法将时间复杂度优化到O(logN)。但如果str只由字符'1’和字符'2'组成,比如 * "12121121212122”,那么就可以使用矩阵乘法的方法将时间复杂度优化为O(logN)。因为str[i]都可以单独转换成字母, * str[i..i+1]也都可以一起转换成字母,此时一定有p(i)=p(i+1)+p(i+2)。总之,可以使用矩阵乘法的前提是递归表达式不会 * 发生转移。 * * @author Created by LiveEveryDay */ public class NumStr2LetterCombination2 { public static int num2(String str) { if (str == null || str.equals("")) { return 0; } char[] chs = str.toCharArray(); int cur = chs[chs.length - 1] == '0' ? 0 : 1; int next = 1; int tmp = 0; for (int i = chs.length - 2; i >= 0; i--) { if (chs[i] == '0') { next = cur; cur = 0; } else { tmp = cur; if ((chs[i] - '0') * 10 + chs[i + 1] - '0' < 27) { cur += next; } next = tmp; } } return cur; } public static void main(String[] args) { String str = "1111"; System.out.printf("The num is: %d", num2(str)); } } // ------ Output ------ /* The num is: 5 */
http://www.jsqmd.com/news/841373/

相关文章:

  • 基于OpenCV与全志T527的嵌入式手势识别:从算法到工程实践
  • 佛山广州佛山五大校区培训哪家好?全日制培训班推荐 - 检测回收中心
  • 零基础也能玩转Switch破解:TegraRcmGUI图形化注入工具完全指南
  • 国产多模态大模型:科学计算领域的“新质生产力”
  • 钦州黄金手镯回收纯银回收白金回收50分钻石回收二手钻石回收高价多少钱一克同城价格查询上门上门估价闲置变现转让靠谱权威排行榜 - 检测回收中心
  • 给 AI加长期记忆:再也不用每次重新交接项目了
  • 【LLM】code agent bench
  • 钦州黄金项链回收老银器回收旧铂金回收1克拉钻石回收二手铂金回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 用TP4056、PW5300和PW2051搞定你的STM32项目供电:从3.7V锂电池到3.3V/5V的完整电路设计
  • Stripe CLI安全最佳实践:如何保护你的API密钥和敏感数据
  • kube-lego深度探索:HTTP-01挑战实现原理与源码分析
  • Namshi/JOSE API参考手册:所有签名算法的详细说明
  • 平顶山黄金戒指回收白银首饰回收高价铂金回收品牌钻戒回收二手白银回收高价多少钱一克同城价格查询上门上门估价闲置变现转让靠谱权威排行榜 - 检测回收中心
  • 佛山广州高职高考封闭班培训哪家好?全日制培训班推荐 - 检测回收中心
  • Win11Debloat:终极Windows系统优化指南,三分钟提升电脑性能38%
  • VNC实战:解锁VMware虚拟机远程桌面访问的完整配置指南
  • 钦州金条回收银条回收铂金项链回收克拉钻石回收婚嫁首饰回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • 如何快速上手ActionView:5分钟完成项目配置和问题创建
  • 3步掌握Demucs-GUI:新手快速入门音乐分离工具
  • 3步搭建免费网盘直链解析服务:彻底告别下载限速烦恼
  • 2026届毕业生推荐的十大AI辅助写作方案横评
  • AI智能体开发框架agentseed:模块化设计与生产级实践指南
  • 从测试系统走向生产系统,SAP S/4HANA Cloud Public Edition 生产系统初始化落地指南
  • 平凉黄金回收白银回收铂金回收钻石回收贵金属回收本地排名正规门店专业推荐哪家靠谱二手哪家强 - 检测回收中心
  • ARM伪代码解析与核心辅助函数详解
  • 从业15年网优老兵实话:5G网优工程师发展前景,看完不迷茫
  • 实战指南:3步将Obsidian笔记库升级为智能AI知识库
  • 模块化电力电子:标准化接口与软件定义如何重塑能源系统设计
  • ncmdumpGUI终极指南:快速解锁网易云音乐加密格式
  • SAP S/4HANA Cloud Public Edition 测试系统初始化,别把 Test System 当成一个空箱子