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 ...
随机推荐
- wx.BoxSizer布局管理器用法,及其Add()方法参数说明
wx.BoxSizer 布局管理器是一种常见的布局管理器,它可以在水平或垂直方向上布置子窗口部件.同时,它还可以在水平或垂直方向上包含其他 wx.BoxSizer 来创建复杂的布局. 下面是 wx.B ...
- 声网Agora Lipsync 技术揭秘:通过实时语音驱动人像模拟真人说话
元宇宙的火热让人们对未来虚拟世界的形态充满了幻想,此前我们为大家揭秘了声网自研的 3D 空间音频技术如何在虚拟世界中完美模拟现实听觉体验,增加玩家沉浸感.今天我们暂时离开元宇宙,回到现实世界,来聊聊声 ...
- 三个经典的MySQL问题
大家好,今天给大家上3个经典的MySQL问题,希望能对大家有帮助!但是因为笔者计算机水平有限,可能会存在一些错误,烦请指出.斧正!谢谢! 一.在MySQL中INNER JOIN.LEFT JOIN.R ...
- Spring 注解整理
更多内容,前往IT-BLOG 一.核心容器 [1]@Configuration:告诉 Spring 这是一个配置类(配置类=配置文件)[2]@Bean:给容器中注册一个 Bean :类型为返回值类型, ...
- ExcelDataReader插件的使用
NPOI插件的弊端 刚来公司的时候公司软件导入导出操作都使用微软的office组件来实现,大家应该都知道这个组件有很大的弊端,就是运行主机上面必须安装office组件才可进行使用,不然无法进行导入导出 ...
- 网络图片的爬取和存储.py(亲测有效)
import requests import os url = "https://ss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/i ...
- 基于el-input实现数字区间输入框(已发布npm/github)
项目地址:https://github.com/heyu3913/InputNumberRange (求star) input-number-range tips:更多定制化需求请联系: 13102 ...
- img2pdf 报 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel 的解决方案
问题描述: 在使用img2pdf转换png到pdf时候,报了如下错误 img2pdf.AlphaChannelError: Refusing to work on images with alph ...
- CentOS8删除boot目录恢复
系统安装完之后,boot分区最好做一个备份,因为这个分区 我们基本不会动它,所以备份一次一劳永逸,以防万一.如果我们不小心 误删除了这个目录,也不用慌,正因为这个分区,我们除了开机 其他时候基本用不到 ...
- Intellij_idea for循环 快捷键
for循环四次.用 i 进行for循环 4.for fori 增强for循环 int [] arrays=new int[2]; arrays.for