递归与动态规划---数字字符串转换为字母组合的种数
来源:互联网 发布:淘宝客服绩效信息 编辑:程序博客网 时间:2024/05/18 03:11
【题目】
给定一个字符串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)),这就是典型的斐波那契问题的变形题,只不过这里是从后往前计算而已。
下面是使用python3.5实现的代码
#数字字符串转换为字母组合的种数#暴力递归方法def num1(str1): def process1(str1, i): if i == len(str1): return 1 if str1[i] == '0': return 0 res = process1(str1, i+1) if i+1 < len(str1) and ((int(str1[i])) * 10 + int(str1[i+1])) < 27: res += process1(str1, i+2) return res if str1 == None or str1 == "": return 0 return process1(str1, 0)#动态规划方法def num2(str1): if str1 == None or str1 == "": return 0 cur = 1 if str1[-1] != '0' else 0 nex = 1 for i in range(len(str1)-2, -1, -1): if str1[i] == '0': nex = cur cur = 0 else: tmp = cur if int(str1[i]) * 10 + int(str1[i+1]) < 27: cur += nex nex = tmp return cur
阅读全文
2 0
- 递归与动态规划---数字字符串转换为字母组合的种数
- 动态规划——数字字符串转换为字母组合的种数(decode-ways)
- 数字字符串转换为字母组合的种数算法
- 数字字符串转换为字母组合的种数
- 数字字符串转换为字母组合的种数
- 数字字符串转换为字母组合的种类数 动态规划
- 数组字符串转换为字母组合的种数
- 动态规划:数字组合
- 用递归实现 整数数字转换为对应的 字符串
- 数字三角形 (动态规划与递归)
- 动态规划&递归-危险的组合
- 递归与动态规划---字符串的交错组成
- 字符串转换为数字与数字转换为字符串库函数
- JS生成随机的由字母数字组合的字符串
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 递归和动态规划的转换
- C++ 随机生成数字和字母组合的字符串
- C#生成8位字母数字组合随机的字符串
- python解析JSON数据的基本方法
- python的冗余参数
- 1%、2小时、1个亿:贾跃亭在香港的日与夜
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用)
- 动态添加OracleParameter 参数
- 递归与动态规划---数字字符串转换为字母组合的种数
- session-缓存-分布式会话session共享、多节点部署session共享解决方案
- 强密码和弱密码并没有什么区别?NIST密码安全标准更新:不再建议密码要求混合大写字母、字符和数字
- 修改svn文件的存取权限
- 轻松看懂机器学习十大常用算法
- 关于python的main函数
- Maven 搭建多模块企业级项目
- 做一个绝世高手
- openstack 环境部署