书籍数字字符串转换为字母组合的种数(4)0607

2024-06-08 21:12

本文主要是介绍书籍数字字符串转换为字母组合的种数(4)0607,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

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

举例:

str=“1111”

能转换出的结果有“AAAA”,“LAA”,“ALA”,"AAL"和“LL”,返回5。

暴力递归先定义递归函数p(i)(0<=i<=N)。p(i)的含义是str[0..i-1]已经转换完毕,而str[i..N-1]还没转换的情况下,最终合法的转换种数有多少并返回。特别指出,p(N)表示str[0..N-1](也就是str的整体)都已经转换完,没有后序的字符了,那么合法的转换种数为1,即p(N)=1。比如,str=“111123”,p(4)表示str[0..3](即“1111”)已经转换完毕,具体结果是什么不重要,反正已经转换完毕并且不可以变,没转换的部分是str[4..5](即“23”),可转换的为“BC”或“W”只有两种,所以p(4)=2。p(6)表示str整体已经转换完毕,所以p(6)=1。那么p(i)如何计算呢?只有以下4中情况。
1、如果i==N,根据上文对P(N)=1的解释,直接返回1.

2、如果不满足情况1,又有srt[i]==‘0’,str[0..i-1]已经转换完毕,而str[i..N-1]此时又以‘0’开头,str[i..N-1]无论怎样都不可能合法转换,所以直接返回0。

3、如果不满足情况1和情况2,说明str[i]属于“1~9”,str[i]可以转化为"A"-“I”,那么p(i)的值一定包含p(i+1)的值,即p(i) = p(i+1)。

4、如果不满足情况1和情况2,说明str[i]属于‘1’-‘9’,如果又有str[i..i+1]在“10”~“26”之间,str[i..i+1]可以转换为‘J’-‘Z’,那么p(i)的值一定也包含p(i+2)的值,即p(i)+=p(i+2).

public int num1(String str){if(str == null || str.equals("")){return 0;}char[] chs = str.toCharArray();return process(chs,0);
}public int process(char[] chs,int i){if(i == chs.length){return 1;}if(chs[i] == '0'){return 0;}int res = process(chs,i+1);if(i+1 < chs.length && (chs[i] - '0') * 10 + chs[i+1] -'0' < 27){res += process(chs,i+2);}return res;
}

这篇关于书籍数字字符串转换为字母组合的种数(4)0607的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043319

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat  四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意:strlen()函数的返回值是size_t,两个size_t相减仍为无符号数 int main(){char arr[10] = "abc";char brr[10] = "abc123";if (strl