当前位置:网站首页>【JZ46 把数字翻译成字符串】
【JZ46 把数字翻译成字符串】
2022-04-23 14:33:00 【Sugar_wolf】
描述
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
我们把一个字符串编码成一串数字,再考虑逆向编译成字符串。
由于没有分隔符,数字编码成字母可能有多种编译结果,例如 11 既可以看做是两个 'a' 也可以看做是一个 'k' 。但 10 只可能是 'j' ,因为 0 不能编译成任何结果。
现在给一串数字,返回有多少种可能的译码结果
数据范围:字符串长度满足 0 < n ≤ 90
进阶:空间复杂度 O(n),时间复杂度 O(n)
示例1
输入: "12"
返回值:2
说明:2种可能的译码结果(”ab” 或”l”)
示例2
输入: "31717126241541717"
返回值:192
说明:192种可能的译码结果
分析:
-
首先对数据进行分类,对于空字符串、首字符为
‘0’的字符串,以及‘0’的前一位不是‘1’或者‘2’的字符串,输出0; -
建立一个动态数组
dp[len+1],用于存储有几种译码结果。dp[0]=1,dp[1]=1。1)若第k个字符和第
k-1个字符能够组合成a到z的合法字符,则dp[k+1]=dp[k]+dp[k-1];2)若无法组成合法字符,则译码结果没有增加,
dp[k+1]=dp[k];3)若第k个字符和第
k-1个字符中有‘0’,则无法产生新的译码方式,dp[k+1]=dp[k];

代码:
class Solution {
public:
int solve(string nums) {
int len = nums.size();
if (len == 0)
return 0;
for (int k = 0;k < len;k++)
{
if (nums[k]=='0')
{
if (k == 0)
return 0;
else if (nums[k-1] != '1' && nums[k-1] != '2')
return 0;
}
}//如果0位于第一位或者0的前面不是1或者2,则无法进行译码
int dp[len+1],temp;
dp[0] = 1;
dp[1] = 1;
for (int k=1;k<len;k++)
{
temp=(nums[k]-'0')+(nums[k-1]-'0')*10;
if (temp > 0 && temp <= 26 && nums[k]!= '0'&& nums[k-1] != '0')
dp[k+1] = dp[k]+dp[k-1];
else
dp[k+1] = dp[k];
}
return dp[len];
}
};
运行时间:6ms
超过15.56% 用C++提交的代码
占用内存:424KB
超过46.36%用C++提交的代码
版权声明
本文为[Sugar_wolf]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Sugar_wolf/article/details/124333220
边栏推荐
- MQ-2和DS18B20的火灾温度-烟雾报警系统设计,51单片机,附仿真、C代码、原理图和PCB等
- Web page, adaptive, proportional scaling
- 查找水仙花数-for循环实践
- QT interface optimization: double click effect
- [servlet] detailed explanation of servlet (use + principle)
- c语言在结构体传参时参数压栈问题
- Master in minutes --- ternary operator (ternary operator)
- Redis cluster 原理
- 外包幹了四年,廢了...
- Electronic scale weighing system design, hx711 pressure sensor, 51 single chip microcomputer (proteus simulation, C program, schematic diagram, thesis and other complete data)
猜你喜欢

本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了

51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码

On the insecurity of using scanf in VS

1 minute to understand the execution process and permanently master the for cycle (with for cycle cases)

单片机的函数信号发生器,输出4种波形,频率可调,原理图,仿真和C程序

金九银十,入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

1N5408-ASEMI整流二极管1N5408

UML项目实例——抖音的UML图描述

TUN 设备原理

DVWA之暴力破解(Brute Force)Low-->high
随机推荐
Man man notes and @ reboot usage of crontab
Outsourcing for four years, abandoned
Some little records~
机器学习之逻辑回归(Logistic Regression)原理讲解和实例应用,果断收藏
Logical volume creation and expansion
API Gateway/API 网关(三) - Kong的使用 - 限流rate limiting(redis)
拼接hql时,新增字段没有出现在构造方法中
Proteus simulation design of DC adjustable regulated power supply (with simulation + paper and other data)
A blog allows you to learn how to write markdown on vscode
UML项目实例——抖音的UML图描述
Docker (V) MySQL installation
Detailed explanation of SAR command
TLS/SSL 协议详解 (28) TLS 1.0、TLS 1.1、TLS 1.2之间的区别
QT actual combat: Yunxi chat room
TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别
Detailed explanation of C language knowledge points -- first knowledge of C language [1]
查找水仙花数-for循环实践
浅谈skiplist在LevelDB的应用
关于UDP接收icmp端口不可达(port unreachable)
外包干了四年,废了...