639. 解码方法 II

639. 解码方法 II

一条包含字母 A-Z 的消息通过以下的方式进行了编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26

要 解码 一条已编码的消息,所有的数字都必须分组,然后按原来的编码方案反向映射回字母(可能存在多种方式)。例如,“11106” 可以映射为:

“AAJF” 对应分组 (1 1 10 6)
“KJF” 对应分组 (11 10 6)
注意,像 (1 11 06) 这样的分组是无效的,因为 “06” 不可以映射为 ‘F’ ,因为 “6” 与 “06” 不同。

除了 上面描述的数字字母映射方案,编码消息中可能包含 '’ 字符,可以表示从 ‘1’ 到 ‘9’ 的任一数字(不包括 ‘0’)。例如,编码字符串 "1" 可以表示 “11”、“12”、“13”、“14”、“15”、“16”、“17”、“18” 或 “19” 中的任意一条消息。对 “1*” 进行解码,相当于解码该字符串可以表示的任何编码消息。

给你一个字符串 s ,由数字和 ‘*’ 字符组成,返回 解码 该字符串的方法 数目 。

由于答案数目可能非常大,返回对 109 + 7 取余 的结果。

示例 1:输入:s = "*"
输出:9
解释:这一条编码消息可以表示 "1"、"2"、"3"、"4"、"5"、"6"、"7"、"8" 或 "9" 中的任意一条。
可以分别解码成字符串 "A"、"B"、"C"、"D"、"E"、"F"、"G"、"H" 和 "I" 。
因此,"*" 总共有 9 种解码方法。
示例 2:输入:s = "1*"
输出:18
解释:这一条编码消息可以表示 "11"、"12"、"13"、"14"、"15"、"16"、"17"、"18" 或 "19" 中的任意一条。
每种消息都可以由 2 种方法解码(例如,"11" 可以解码成 "AA" 或 "K")。
因此,"1*" 共有 9 * 2 = 18 种解码方法。
示例 3:输入:s = "2*"
输出:15
解释:这一条编码消息可以表示 "21"、"22"、"23"、"24"、"25"、"26"、"27"、"28" 或 "29" 中的任意一条。
"21"、"22"、"23"、"24"、"25" 和 "26" 由 2 种解码方法,但 "27"、"28" 和 "29" 仅有 1 种解码方法。
因此,"2*" 共有 (6 * 2) + (3 * 1) = 12 + 3 = 15 种解码方法。

数组含义

dp[i]代表字符串前i个字符的解码方法数目

初始化

dp[0]=1。代表空字符串的解码方法只有一种

状态转移

  1. 当只解码一个字符时,将当前字符可能的情况数目与前面的dp[i-1]相乘
  • 字符为*,可以解码为1-9,共9种情况
  • 字符不为*,解法已经确定了,只能有一种解码方法
  1. 解码两个字符时,,将当前字符可能的情况数目与前面的dp[i-2]相乘
  • 字符为**,能解码出11-19 21-26共15种
  • 字符为*c,*只能解码为1或者2,当c小于6时,可以为1或者2(2种),否则只能解码为1(1种)
  • 字符为c*,c只能为1或者2才能进行解码,1可能匹配9种情况,2能匹配6种情况
  • 字符为cc,要判断cc是否处于10-26这个区间(1种情况),否则0种

代码

class Solution {public int numDecodings(String s) {int n=s.length(),mod=1000000007;long[] dp=new long[n+1];dp[0]=1;for(int i=0;i<n;i++){dp[i+1]=dp[i]*getOne(s.charAt(i))%mod;if(i>0){dp[i+1]=(dp[i+1]+(dp[i-1]*getTwo(s.charAt(i-1),s.charAt(i))))%mod;                }}return (int)dp[n];}public int getOne(char c){if(c=='0') return 0;return c=='*'?9:1;}public int getTwo(char c1,char c2){if(c1=='*'&&c2=='*')return 15;if(c1=='*')return c2>'6'?1:2;if(c2=='*'){if(c1=='2')return 6;else if(c1=='1')return 9;else return 0;}if(c1=='1'||c1=='2'&&c2<='6')return 1;return 0;          }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[cpyhon源代码]dict对象原理学习

Cpython 2.7 分支中&#xff0c;dict 对象的源代码 lookdict 搜索算法 1 static PyDictEntry *2 lookdict(PyDictObject *mp, PyObject *key, register long hash)3 {4 register size_t i;5 register size_t perturb;6 register PyDictEntry *freeslot;7 regis…

熊猫数据集_熊猫迈向数据科学的第一步

熊猫数据集I started learning Data Science like everyone else by creating my first model using some machine learning technique. My first line of code was :通过使用某种机器学习技术创建我的第一个模型&#xff0c;我开始像其他所有人一样学习数据科学。 我的第一行代…

SQLServer锁的机制

SQLServer锁的机制&#xff1a;共享锁(S)排它锁(X)更新锁(U)意向共享 (IS)意向排它 (IX) 意向排它共享 (SIX)架构修改(Sch-M) 架构稳定性(Sch-S)大容量更新&#xff08;BU&#xff09;转载于:https://www.cnblogs.com/yldIndex/p/8603902.html

你是否具有价值

一个有价值的人往往受欢迎的程度才会高。白天上午花了两个多小时的时间帮前同事远程解决了服务器部署时由于防火墙机制问题引起的系统功能失败的问题。解决完这个问题之后&#xff0c;同事的心情很愉悦&#xff0c;其实我自己的心情也很愉悦&#xff0c;看来人都有帮助别人和被…

为什么选择做班级管理系统_为什么即使在平衡的班级下准确性也很麻烦

为什么选择做班级管理系统Accuracy is a go-to metric because it’s highly interpretable and low-cost to evaluate. For this reason, accuracy — perhaps the most simple of machine learning metrics — is (rightfully) commonplace. However, it’s also true that m…

使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)

使用Chrome开发者工具调试Android端内网页(微信&#xff0c;QQ&#xff0c;UC&#xff0c;App内嵌页等) 传送门转载于:https://www.cnblogs.com/momozjm/p/9389912.html

517. 超级洗衣机

517. 超级洗衣机 假设有 n 台超级洗衣机放在同一排上。开始的时候&#xff0c;每台洗衣机内可能有一定量的衣服&#xff0c;也可能是空的。 在每一步操作中&#xff0c;你可以选择任意 m (1 < m < n) 台洗衣机&#xff0c;与此同时将每台洗衣机的一件衣服送到相邻的一台…

netflix的准实验面临的主要挑战

重点 (Top highlight)Kamer Toker-Yildiz, Colin McFarland, Julia GlickKAMER Toker-耶尔德兹 &#xff0c; 科林麦克法兰 &#xff0c; Julia格里克 At Netflix, when we can’t run A/B experiments we run quasi experiments! We run quasi experiments with various obje…

网站漏洞检测针对区块链网站安全分析

2019独角兽企业重金招聘Python工程师标准>>> 目前移动互联网中&#xff0c;区块链的网站越来越多&#xff0c;在区块链安全上&#xff0c;很多都存在着网站漏洞&#xff0c;区块链的充值&#xff0c;会员账号的存储性XSS窃取漏洞&#xff0c;账号安全&#xff0c;等…

223. 矩形面积

223. 矩形面积 给你 二维 平面上两个 由直线构成的 矩形&#xff0c;请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示&#xff1a; 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, by1) …

微观计量经济学_微观经济学与数据科学

微观计量经济学什么是经济学和微观经济学&#xff1f; (What are Economics and Microeconomics?) Economics is a social science concerned with the production, distribution, and consumption of goods and services. It studies how individuals, businesses, governmen…

NPM 重新回炉

官方教程传送门( 英文 ) 本文主要是官方文章的精炼,适合想了解一些常用操作的同学们 NPM 是 基于node的一个包管理工具 , 安装node环境时会自带安装NPM. NPM版本管理 查看现有版本 npm -v 安装最新的稳定版本 npm install npmlatest -g 安装最新的测试版本 npm install npmn…

1436. 旅行终点站

1436. 旅行终点站 给你一份旅游线路图&#xff0c;该线路图中的旅行线路用数组 paths 表示&#xff0c;其中 paths[i] [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站&#xff0c;即没有任何可以通往其他城市的线路的城市。 题目数据…

如何使用fio模拟线上环境

线上表现 这里我想通过fio来模拟线上的IO场景&#xff0c;那么如何模拟呢&#xff1f; 首先使用iostat看线上某个盘的 使用情况&#xff0c;这里我们需要关注的是 avgrq-sz, avgrq-qz. #iostat -dx 1 1000 /dev/sdk Device: rrqm/s wrqm/s r/s w/s rkB/s …

熊猫数据集_熊猫迈向数据科学的第二部分

熊猫数据集If you haven’t read the first article then it is advised that you go through that before continuing with this article. You can find that article here. So far we have learned how to access data in different ways. Now we will learn how to analyze …

Python基础综合练习

Pycharm开发环境设置与熟悉。 练习基本输入输出&#xff1a; print(你好,{}..format(name)) print(sys.argv) 库的使用方法&#xff1a; import ... from ... import ... 条件语句&#xff1a; if (abs(pos()))<1: break 循环语句&#xff1a; for i in range(5): while Tru…

POJ 3608 旋转卡壳

思路&#xff1a; 旋转卡壳应用 注意点&边 边&边 点&点 三种情况 //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using namespace std; const double eps1e-5; const int N10050; typedef double db; int n,m; str…

405. 数字转换为十六进制数

405. 数字转换为十六进制数 给定一个整数&#xff0c;编写一个算法将这个数转换为十六进制数。对于负整数&#xff0c;我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。如果要转化的数为0&#xff0c;那么…

为什么我要重新开始数据科学

I’m feeling stuck.我感觉卡住了。 In my current work and in the content I create (videos and blog posts), I feel like I’ve begun to stall out. Most of the consumers of my content are at the start of their data science journey. The longer I’m in the fiel…

蓝牙协议 HFP,HSP,A2DP,A2DP_CT,A2DP_TG,AVRCP,OPP,PBAP,SPP,FTP,TP,DTMF,DUN,SDP

简介&#xff1a; HSP&#xff08;手机规格&#xff09;– 提供手机&#xff08;移动电话&#xff09;与耳机之间通信所需的基本功能。 HFP&#xff08;免提规格&#xff09;– 在 HSP 的基础上增加了某些扩展功能&#xff0c;原来只用于从固定车载免提装置来控制移动电话。 A2…