题目

  给定一个字符串str,str全部由数字字符组成,如果str中某一个或者某相邻两个字符组成的子串在1~26之间,则这个子串可以转换为一个字母。规定“1”转换为“A”,“2”转换为“B”……“26”转换为“Z”。求str有多少种不同的转换结果。

举例

  str = “1111” 
  能转换成的结果有“AAAA”,“LAA”,“ALA”,“AAL”和“LL”,返回5。 
  str = “01”,“0”没有对应的字母,返回0。

基本思路
1.暴力递归的方法。定义递归函数p(i),p(i)表示只转换字符串的i~N-1部分(N表示字符串的长度),一共有多少种转换结果。接下来便可以进行递归求解:

如果i == N,p(N)表示没有任何字符需要转换,返回 1。

如果str[i] == ‘0’,因为以0开头的子串都能进行转换,所以返回 0。

如果不满足条件1和2,说明此时str[i]在 ‘1’ 到 ‘9’ 之间,这个时候str[i]能转换的种数至少包含p(i+1)。如果str[i]和str[i+1]的组合又在 ‘10’ 到 ‘26’ 之间,则str[i]能转换的种数还要包含p(i+2),即p(i) = p(i+1) 或者p(i) = p(i+1) + p(i+2)。
2.动态规划的方法。由上述可知,p(i)的值最多依赖于p(i+1)和p(i+2),即p(i) = p(i+1) (+ p(i+2)),这就是典型的斐波那契问题的变形题,只不过这里是从后往前计算而已。

"""暴力递归"""def num1(str1):if str1 == None or str1 == '':return 0return process(str1,0)def process(str1,i):if i == len(str1):return 1if str1[i] == '0':return 0res = process(str1,i+1)if i+1 < len(str1) and ((int(str1[i]))*10 + int(str1[i+1])< 27:res += process(str1,i+2)return res"""动态规划"""def num2(str1):if str1 == None or str1 == '':return 0if str1[-1] != 0:cur = 1else:cur = 0next_ = 1for i in range(len(str1)-2,-1,-1):if str1[i] == '0':next_ = curcur = 0else:tmp = curif int(str1[i])*10 + int(str1[i+1])< 27:cur += next_next_ = tmpreturn cur

数字字符串转化为字母组合的种数相关推荐

  1. 数字字符串转化为数字

    包含两种方法,推荐使用第二种,部分情况使用第一种. 还包含将数字转化为字符串的方法. 包含求a的b次方函数使用方法. 包含求绝对值函数的用法. #include<bits/stdc++.h> ...

  2. 给定数字字符串,返回字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 例:输入"23" 输出 :[ ad, b ...

  3. 数字字符串转化为时间字符串

    + (NSString *)dateStringFromNumberTimer:(NSString *)timerStr {     //转化为Double     double t = [timer ...

  4. 如何将比Long类型更大数值字符串转化为整数

    前几天,需要做一个number类型的数据库主键唯一处理,而且有38位.于是再想使用什么规则控制唯一性.最后决定采用时间,年月日时分秒毫秒,再加随机数. 问题产生了,如何将一个38位的数字字符串转化为整 ...

  5. c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......

    导航:网站首页 > 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个字符串中相连的两个数字转化为一... 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个 ...

  6. js 字符串转化成数字

     js 字符串转化成数字 的 三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换 ...

  7. pandas使用to_datetime函数将时间字符串转化为时间对象、其中月份内容为字母而非数字(例如,“January 2, 2022“)

    pandas使用to_datetime函数将时间字符串转化为时间对象.其中月份内容为字母而非数字(例如,"January 2, 2022") 目录 pandas使用to_datet ...

  8. 字符串转化为数字的函数

    C++字符串转化为数字的库函数 1.atoi 功 能:把一字符串转换为整数 用 法:int atoi(const char *nptr); 详细解释:atoi是英文array to integer 的 ...

  9. Swift 数字字符串格式化

    字符串格式说明符 官网文档:String Format Specifiers 字面值格式化法 如果需要直接显示原样值的时候,只可以方便的在字符串中插入\(变量)显示. 字面值格式: 字符串中包裹着\( ...

最新文章

  1. python没有英语基础的好学吗-Python好学吗难不难?0基础能学会吗?
  2. 《系统集成项目管理工程师》必背100个知识点-56X理论和Y理论
  3. 前端之 JavaScript 常用数据类型和操作
  4. 设计模式的理解的总结
  5. java.lang.math.trunc,java – JPA/Hibernate返回BigDecimal不长
  6. Memcache简介
  7. php获取内存峰值,php内存\获取\使用
  8. 火出天际的“元宇宙”究竟是什么?
  9. Php保护数据库连接信息,php连接数据库,哪里填自己的数据库信息啊,能⭕下吗?我乱填后总是服务器正在维护。代码如下...
  10. python输入一个整数、输出该整数的所有素数因子_【401】Python 求合数的所有质数因子...
  11. error C2668: “pow”: 对重载函数的调用不明确
  12. Kettle JAVA代码表达式
  13. 《算法导论》.pdf
  14. 斐讯k2p梅林忘记密码恢复出厂之后的解决办法
  15. iOS设备的越狱方法
  16. 如何营造游戏的打击感(一)
  17. [proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)
  18. vue的过渡动画(有vue的动画库和ui库的介绍)
  19. Add Python Interpreter 报错 Error code:2. XX can‘t open file XX [Errno 2] No such file or directory
  20. 苹果手机怎么清理喇叭灰尘_手机喇叭声音小怎么办?打电话听不见怎样清灰?...

热门文章

  1. Nature:中国正在上演AI人才争夺战,中国公司在与Google竞争
  2. ORA-04031:oracle无法分配共享内存
  3. Windows Server2012 搭建域错误“本地Administraor账户不需要密码”
  4. 函数调用通过函数名字符串调用函数【C语言版】
  5. Windows平板电脑将取代苹果在企业市场地位
  6. 网络管理员所需要的知识结构和素质
  7. 广播等风暴的解决办法
  8. 算法基础课-搜索与图论-spfa-AcWing 852. spfa判断负环:spfa求负环板子
  9. 台湾国立大学郭彦甫Matlab教程笔记(8)文件读写
  10. 关于epoll 水平触发在udp套接字上不生效问题的原因