[LeetCode] Decode Ways 解码方法个数、动态规划
2024-09-28 01:01:55
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
这道题要求解码方法,跟之前那道Climbing Stairs 爬梯子问题 非常的相似,但是还有一些其他的限制条件,比如说一位数时不能为0,两位数不能大于26,其十位上的数也不能为0,出去这些限制条件,根爬梯子基本没啥区别,也勉强算特殊的斐波那契数列,当然需要用动态规划Dynamci Programming来解。建立一位dp数组,长度比输入数组长多多2,全部初始化为1,因为斐波那契数列的前两项也为1,然后从第三个数开始更新,对应数组的第一个数。对每个数组首先判断其是否为0,若是将改为dp赋0,若不是,赋上一个dp值,此时相当如加上了dp[i - 1], 然后看数组前一位是否存在,如果存在且满足前一位不是0,且和当前为一起组成的两位数不大于26,则当前dp值加上dp[i - 2], 至此可以看出来跟斐波那契数组的递推式一样,代码如下:
class Solution {
public:
int numDecodings(string s) {
if(s.length()==) return ;
if(s.length()>&&s[]=='') return ;
int len=s.length();
vector<int> v(len+,);
v[]=;
for(int i=;i<=len;i++){
if(s[i-]!='')
v[i]=v[i-];
if(i>&&(s[i-]==''||(s[i-]==''&&s[i-]<='')))
v[i]+=v[i-];
}
return v[len]; }
};
最新文章
- 在excel worksheet中添加button 和对Excel workbook做权限控制相关的新知识
- Android bluetooth用户自定义数据
- (一)解决Sublime Text 2中文显示乱码问题
- 对cocos2d 之autorelease\ratain\release的理解
- C#的类成员初始化顺序
- Asp.Net MVC5入门学习系列④
- c语言基础学习07
- kibana使用
- 爬虫综合大作业——网易云音乐爬虫 &; 数据可视化分析
- TestNG(一)
- 完整的Django入门指南学习笔记7 网页自动翻译
- IDA远程调试 在内存中dump Dex文件
- SQL server 清除缓存
- module &#39;pip&#39; has no attribute &#39;pep425tags&#39;
- new.target
- OData查询ASP.NET Web API全攻略
- linux命令:linux文件处理命令
- python yield yield from
- Python2X和Python3X的区别
- Swarm使用原生的overlay网络
热门文章
- AngularJs MVC 详解
- Sum of Squares of the Occurrence Counts解题报告(后缀自动机+LinkCutTree+线段树思想)
- rand()与 srand()
- 【09】node 之 fs流读写
- pat 团体天梯赛 L2-011. 玩转二叉树
- ZOJ1608 Two Circles and a Rectangle
- UVa 11234 The Largest Clique
- 一个.java文件定义多个类的情况
- HBase shell 中的十六进制数值表示
- centos7下mysql双主+keepalived