原题链接: http://oj.leetcode.com/problems/decode-ways/ 

这道题要求解一个数字串依照字符串编码方式可解析方式的数量。看到这样的求数量的,我们非常easy想到动态规划来存储前面信息,然后迭代得到最后结果。

我们维护的量res[i]是表示前i个数字有多少种解析的方式,接下来来想想递归式,有两种方式:第一种新加进来的数字不然就是自己比較表示一个字符,那么解析的方式有res[i-1]种,另外一种就是新加进来的数字和前一个数字凑成一个字符,解析的方式有res[i-2]种(由于上一个字符和自己凑成了一个)。当然这里要推断前面说的两种情况是否能凑成一个字符,也就是范围的推断,假设能够才有相应的解析方式,假设不行,那么就是0。终于结果就是把这两种情况相应的解析方式相加。这里能够把范围分成几个区间:

(1)00:res[i]=0(无法解析,没有可行解析方式);

(2)10, 20:res[i]=res[i-2](仅仅有另外一种情况成立);

(3)11-19, 21-26:res[i]=res[i-1]+res[i-2](两种情况都可行);

(4)01-09, 27-99:res[i]=res[i-1](仅仅有第一种情况可行);

递推式就是依照上面的规则来得到,接下来我们仅仅要进行一遍扫描,然后依次得到维护量就能够了,算法的时间复杂度是O(n)。空间上能够看出我们每次仅仅须要前两位的历史信息,所以仅仅须要维护三个变量然后迭代赋值就能够了,所以空间复杂度是O(1)。代码例如以下:

public int numDecodings(String s) {
if(s==null || s.length()==0 || s.charAt(0)=='0')
{
return 0;
}
int num1=1;
int num2=1;
int num3=1;
for(int i=1;i<s.length();i++)
{
if(s.charAt(i)=='0')
{
if(s.charAt(i-1)=='1' || s.charAt(i-1)=='2')
num3 = num1;
else
return 0;
}
else
{
if(s.charAt(i-1)=='0' || s.charAt(i-1)>='3')
num3 = num2;
else
{
if(s.charAt(i-1)=='2' && s.charAt(i)>='7' && s.charAt(i)<='9')
num3 = num2;
else
num3 = num1+num2;
}
}
num1 = num2;
num2 = num3;
}
return num2;
}

这道题是一维动态规划的题目,递推式关系来说是比較easy得到的,主要是要对这些两位数进行划分有一些细节,easy出小错误。

Decode Ways -- LeetCode的更多相关文章

  1. Decode Ways leetcode java

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  2. [LeetCode] Decode Ways 解码方法

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  3. leetcode@ [91] Decode Ways (Dynamic Programming)

    https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...

  4. leetcode面试准备:Decode Ways

    1 题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: ...

  5. [LeetCode] Decode Ways II 解码方法之二

    A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...

  6. leetcode 91 Decode Ways I

    令dp[i]为从0到i的总方法数,那么很容易得出dp[i]=dp[i-1]+dp[i-2], 即当我们以i为结尾的时候,可以将i单独作为一个字母decode (dp[i-1]),同时也可以将i和i-1 ...

  7. 动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways

    引言 一维动态规划根据转移方程,复杂度一般有两种情况. func(i) 只和 func(i-1)有关,时间复杂度是O(n),这种情况下空间复杂度往往可以优化为O(1) func(i) 和 func(1 ...

  8. LeetCode解题报告—— Word Search & Subsets II & Decode Ways

    1. Word Search Given a 2D board and a word, find if the word exists in the grid. The word can be con ...

  9. Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)

    Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...

随机推荐

  1. 解决android模拟器太大,小屏幕无法完全显示的问题

    http://hi.baidu.com/conanx/blog/item/05479befd6534d03fdfa3cbb.html 安装上Android模拟器之后,开启一个Android 2.2的模 ...

  2. python系统编码格式

    python在安装的时候默认的编码格式是ASCII,当程序中出现非ASCII编码时,python的处理常常会报这样的错UnicodeDecodeError,python没办法处理非ASCII编码的,此 ...

  3. hdu 4739

    一个超级超级水的题,不明白当时比赛的时候没有出来: 思路很简单,dfs暴力一下就行,枚举每个顶点,题目一共才20个点,就是20^4方的时间复杂度,完全可以承受: 代码: #include<cst ...

  4. js template

    http://garann.github.io/template-chooser/ http://www.gbin1.com/technology/javascript/20120917-javasc ...

  5. Python3整理文件

    晚上打算把播放器下载下来的音乐拷贝到mp3里边,但是它是如下形式存放的,相当头痛…… 作为程序员,想到使用python来遍历这个目录,并将有大于限制的音乐文件拷贝到指定目录,相关实现代码如下: # a ...

  6. WebX配置文件、启动与响应流程

    ** 最近几天一直在看Spring的Ioc和AOP的源码介绍,还有Webx的使用.看Spring的源代码让人眼花缭乱,webx的配置文件也会让人感觉错综复杂无从下手.今天把之前看到的想到的webx相关 ...

  7. YIi 使用 beginContent() 和 endContent() 设定 Yii 的 layouts

    Yii 的 views/layouts 是用来放置 layouts 的目录,在默认的情况下会有 main.php 和 column1.php 和 column2.php. main.php 内容定义了 ...

  8. WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞

    漏洞名称: WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞 CNNVD编号: CNNVD-201310-642 发布时间: 2013 ...

  9. WordPress Complete Gallery Manager插件‘upload-images.php’任意文件上传漏洞

    漏洞名称: WordPress Complete Gallery Manager插件‘upload-images.php’任意文件上传漏洞 CNNVD编号: CNNVD-201309-377 发布时间 ...

  10. dos攻击与防御

    SYN Flood攻击 标准的TCP三次握手过程如下: 客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号:  服 ...