2021-10-04:解码方法 II。‘A‘ -> 1,‘B‘ -> 2,...‘Z‘ -> 26。*是1-9,不包含0。给你一个字符串 s ,由数字和 ‘*‘ 字符组成,返回 解码 该字符串的方法
2021-10-04:解码方法 II。‘A’ -> 1,‘B’ -> 2,…‘Z’ -> 26。是1-9,不包含0。给你一个字符串 s ,由数字和 '’ 字符组成,返回 解码 该字符串的方法 数目 。由于答案数目可能非常大,返回对 10**9 + 7 取余 的结果。力扣639。
福大大 答案2021-10-04:
递归。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
str := "123*456"
ret := numDecodings0(str)
fmt.Println(ret)
}
func numDecodings0(str string) int {
return f([]byte(str), 0)
}
func f(str []byte, i int) int {
if i == len(str) {
return 1
}
if str[i] == '0' {
return 0
}
// str[index]有字符且不是'0'
if str[i] != '*' {
// str[index] = 1~9
// i -> 单转
p1 := f(str, i+1)
if i+1 == len(str) {
return p1
}
if str[i+1] != '*' {
num := (str[i]-'0')*10 + str[i+1] - '0'
p2 := 0
if num < 27 {
p2 = f(str, i+2)
}
return p1 + p2
} else { // str[i+1] == '*'
// i i+1 -> 一起转 1* 2* 3* 9*
p2 := 0
if str[i] < '3' {
//p2 = f(str, i + 2) * (str[i] == '1' ? 9 : 6);
if str[i] == '1' {
p2 = f(str, i+2) * 9
} else {
p2 = f(str, i+2) * 6
}
}
return p1 + p2
}
} else { // str[i] == '*' 1~9
// i 单转 9种
p1 := 9 * f(str, i+1)
if i+1 == len(str) {
return p1
}
if str[i+1] != '*' {
// * 0 10 20
// * 1 11 21
// * 2 12 22
// * 3 13 23
// * 6 16 26
// * 7 17
// * 8 18
// * 9 19
p2 := 0
if str[i+1] < '7' {
p2 = 2 * f(str, i+2)
} else {
p2 = f(str, i+2)
}
return p1 + p2
} else { // str[i+1] == *
// **
// 11~19 9
// 21 ~26 6
// 15
p2 := 15 * f(str, i+2)
return p1 + p2
}
}
}
执行结果如下:

2021-10-04:解码方法 II。‘A‘ -> 1,‘B‘ -> 2,...‘Z‘ -> 26。*是1-9,不包含0。给你一个字符串 s ,由数字和 ‘*‘ 字符组成,返回 解码 该字符串的方法的更多相关文章
- mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...
- Ubuntu 10.04下架设流媒体服务器
Ubuntu 10.04下架设流媒体服务器 个人建议:使用DarwinStreamingSrvr5.5.5,因为DarwinStreamingSrvr6.0.3安装过程中有很多问题需要解决! 目前主流 ...
- js字符串转换成数字与数字转换成字符串的实现方法
转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...
- mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...
- JS前端取得并解析后台服务器返回的JSON数据的方法
摘要:主要介绍:使用eval函数解析JSON数据:$.getJSON()方法获得服务器返回的JSON数据 JavaScript eval() 函数 eval(string) 函数可计算某个字符串,并执 ...
- [LeetCode] 639. Decode Ways II 解码方法 II
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- OFBIZ 10.04 开发环境搭建(ofbiz+mysql+eclipse)
1.下载安装 JDK1.6,并设置环境变量 在“我的电脑”上点右键—>“属性”—>“高级”—> “环境变量(N)”. 新建系统变量JAVA_HOME:C:Program Fil ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- Ubuntu 10.04 32位桌面版+OpnERP 6.1.1
1.准备环境: sudo apt-get install denyhosts sudo apt-get update sudo apt-get dist-upgrade sudo adduser ...
- ubuntu 10.04 安装qt 5.0.2
转自ubuntu 10.04 安装qt 5.0.2 从qt project网站下载下来最新的qt5.0.2套件,发现是个.run文件,添加x属性,然后直接sudo ./****.run, 提示 /l ...
随机推荐
- 【BUUCTF]ACTF2020 新生赛Exec1write up
根据题目分析,俺们要用ping命令! 打开靶机,输入127.0.0.1尝试提交,直接出现无过滤: 尝试管道符执行命令,常见管道符: 1.|(就是按位或),直接执行|后面的语句 2.||(就是逻辑或), ...
- 发布jar包到远程仓库 (maven deploy)
背景: 项目有开放服务模块,现有个需求,需要把开放服务提供成一个jar包,用户可以直接对接. 流程: 1.在pom.xml文件添加distributionManagement节点,将项目打包上传到私服 ...
- vulnhub靶场之PYLINGTON: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Pylington: 1,下载地址:https://download.vulnhub.com/pylington/pylington.ova,下 ...
- MySQL学习(二)事务的隔离级别
:规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的.较低级别的隔离通常可以执行更高的并发,系统的开销也更低 read uncommitted(未提交读):事务中的修改,即使没有 ...
- mybatis-plus #和$的使用场景
#防止sql注入,但是会把里面的内容默认为是字符串 $使用场景:如果条件查询要加入数据权限判断,那么久需要使用$符号而不是#符号
- JOI 简单题选做
就是把洛谷上评分为紫的题做了一下(汗) 前两道题没做出来,暴露了自己在 dp 上的短板. イベント巡り 2 一开始想到贪心,但发现我们只要选 \(k\) 个即可,所以可以尝试一些更劣但是编号更小的做法 ...
- 组合构造和对应的OGF/EGF Dictionary 备查
目录 Constructions Cycle Multiset construction Powerset construction Admissible unlabelled constructio ...
- 基于swiper.js的异型轮播
基于原生swiper.js的异型轮播 <div class="swiper-container" > <div class="swiper-wrappe ...
- vulnhub靶场之WIRELESS: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Wireless: 1,下载地址:https://download.vulnhub.com/wireless/Mystiko-Wireless. ...
- pysimplegui之运行多个窗口
运行多个窗口 这就是 PySimpleGUI 继续简单的地方,但问题空间刚刚进入"复杂"领域. 如果您希望在事件循环中运行多个窗口,那么有两种方法可以做到这一点. 当第二个窗口可见 ...