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]; }
};

最新文章

  1. 在excel worksheet中添加button 和对Excel workbook做权限控制相关的新知识
  2. Android bluetooth用户自定义数据
  3. (一)解决Sublime Text 2中文显示乱码问题
  4. 对cocos2d 之autorelease\ratain\release的理解
  5. C#的类成员初始化顺序
  6. Asp.Net MVC5入门学习系列④
  7. c语言基础学习07
  8. kibana使用
  9. 爬虫综合大作业——网易云音乐爬虫 &amp; 数据可视化分析
  10. TestNG(一)
  11. 完整的Django入门指南学习笔记7 网页自动翻译
  12. IDA远程调试 在内存中dump Dex文件
  13. SQL server 清除缓存
  14. module &#39;pip&#39; has no attribute &#39;pep425tags&#39;
  15. new.target
  16. OData查询ASP.NET Web API全攻略
  17. linux命令:linux文件处理命令
  18. python yield yield from
  19. Python2X和Python3X的区别
  20. Swarm使用原生的overlay网络

热门文章

  1. AngularJs MVC 详解
  2. Sum of Squares of the Occurrence Counts解题报告(后缀自动机+LinkCutTree+线段树思想)
  3. rand()与 srand()
  4. 【09】node 之 fs流读写
  5. pat 团体天梯赛 L2-011. 玩转二叉树
  6. ZOJ1608 Two Circles and a Rectangle
  7. UVa 11234 The Largest Clique
  8. 一个.java文件定义多个类的情况
  9. HBase shell 中的十六进制数值表示
  10. centos7下mysql双主+keepalived