书籍数字字符串转换为字母组合的种数(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

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转