Decode Ways -- LeetCode
原题链接: 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的更多相关文章
- Decode Ways leetcode java
题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...
- [LeetCode] Decode Ways 解码方法
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- leetcode@ [91] Decode Ways (Dynamic Programming)
https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...
- leetcode面试准备:Decode Ways
1 题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: ...
- [LeetCode] Decode Ways II 解码方法之二
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- 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 ...
- 动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways
引言 一维动态规划根据转移方程,复杂度一般有两种情况. func(i) 只和 func(i-1)有关,时间复杂度是O(n),这种情况下空间复杂度往往可以优化为O(1) func(i) 和 func(1 ...
- 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 ...
- Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)
Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...
随机推荐
- zend studio 9.0.4 安装破解
转载于 http://www.geekso.com/ZendStudio9-key 注册破解步骤第一步:如果已经安装过Zend Studio 9.0.4的,请打开Zend Studio 9.0.4,在 ...
- HTML -- 元素和属性
HTML -- 元素 HTML元素是从开始标签到结束标签之间的代码,如: <!-- 加粗标签 --> <b>一些元素</b> <!-- 换行 --> & ...
- Http 状态码详解
状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...
- IOS中获取文件路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- EF4 Code First和EF6 Code First链接mysql的方法
1.首先需要下载安装.Net的Mysql驱动 下载地址如下:http://dev.mysql.com/downloads/connector/net/ 2.配置Web.Config EF6: 配置链接 ...
- HTTP状态码——对照表
ASCII码介绍: HTTP状态码(HTTP Status Code)用来表示web服务器响应客户端的HTTP状态.主要有一下5种状态类型.1xx 消息2xx 成功3xx 重定向4x ...
- c++ 函数的函数声明
c++ 函数的函数声明 只要在被调用函数的首部的末尾加一个分号,就成为对该函数的函数声明.函数声明的位置应当在函数调用之前. #include <iostream> using names ...
- 【技术贴】破解Myeclipse10.7
程序用的是http://www.cr173.com/soft/58306.html这个破解程序,是英文版的中文版.使用起来非常爽,看下面 使用期间关掉Myeclipse 期间的第三步,点击激活,此时会 ...
- Multiplication Puzzle
题目大致意思是:一个整数序列包含N个1~100的整数(3<=N<=100),从中取出一个数并和相邻两边的整数相乘,依次进行下去直到只剩下首尾两个数为止,求最终的得到的和的最小值.两边的数不 ...
- System.Windows.Forms中的Message Structure
结构用途说明Implements a Windows message. Properties 1.public IntPtr HWnd { get; set; } Gets or sets the w ...