A message containing letters fromA-Zis 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.

题意:给定编码信息,求有几种解码方式。

思路:动态规划,爬楼梯,词语打断、等一系列都可以使用动态规划。首先思考,若是字符串S为空,或者其首字母为'0'的情况,这时,因为编码是,数字是从1开始的,所以这两种情况下返回值都是0;当为字符串中间时,当前字符有两种编码方式,一是单独,二是和前面的字符组合解码;

1)当前面一个字符为'1'时,当前字符可以为0~9的任意一个,而为‘2’时,当前字符要小于'7',此时,当前字符既可以单独解码也可以和前面的联合起来解码dp[i]=dp[i-1]+dp[i-2];

2)若在字符串中间遇到'0',因为'0'能组成的只有两种'10'和'20',即,当前字符为'0'时,只能和前面的字母组合,即dp[i]=dp[i-2];

3)而前面的字符大于'2'时,当前字符只能是单独解码,即解码的方式在前一个的基础上不会增加dp[i]=dp[i-1]

所以,先根据当前字符是否为'0'先给dp[i]赋值:dp[i]=(s[i-1]=='0'?0:dp[i-1]):然后,若是满足条件一,则dp[i]+=dp[i-2];代码如下:

 class Solution {
public:
int numDecodings(string s)
{
if(s.empty()||s.size()&&s[]=='') return ;
vector<int> dp(s.size()+,); dp[]=;
for(int i=;i<=s.size();++i)
{
dp[i]=(s[i-]==''?:dp[i-]);
if(i>&&s[i-]==''||(s[i-]==''&&s[i-]<=''))
dp[i]+=dp[i-];
}
return dp.back();
}
};

最新文章

  1. hdu3448 01背包+dfs
  2. 最新CSS3常用30种选择器总结(适合初学者)
  3. 纯C++ 连接SQL Server2005 数据库读写操作的小例子
  4. A Tour of Go Exercise: Fibonacci closure
  5. 迅雷程浩:企业外包服务,下一个大的风口?(2B业务一定要懂销售和营销的人,这点和2C 不一样)
  6. 块对象block小结(2)
  7. eclipse中生成的html存在中文乱码问题的解决方法
  8. たくさんの数式 / Many Formulas AtCoder - 2067 (枚举二进制)
  9. JavaScript大杂烩2 - 理解JavaScript的函数
  10. 第三个Sprint ------第五天
  11. NAND Flash vs NOR Flash
  12. 前端框架VUE
  13. 洛谷 P3373:【模板】线段树 2(区间更新)
  14. 廖雪峰Java6 IO编程-2input和output-5操作zip
  15. 【LOJ】#2569. 「APIO2016」最大差分
  16. 使用Maven命令行快速创建项目骨架(archetype)
  17. 当网页失去焦点时改变网页的title值
  18. attachEvent 中this指向
  19. 稳固而窒息 jquery attr 和 Prop的区别
  20. 常用有话帧检测技术(VAD)

热门文章

  1. python练习笔记
  2. python中协程实现的本质以及两个封装协程模块greenle、gevent
  3. HyperLedger Fabric 1.4 超级账本简介(5.2)
  4. R语言学习笔记(二十):stringr包中函数介绍(表格)
  5. CS61B sp2018笔记 | Lists
  6. 38-JWT 设计解析及定制
  7. Java——英文字母---18.10.11
  8. stm32--FatFs移植(SPIFlash)
  9. MYSQL--事务处理(转)
  10. 1,理解java中的IO