leetcode 91 Decode Ways ----- java
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.
按照题目中的规则,给定一个字符串,然后判断有多少种原始的组合方式。
1、基本方法是用动态规划,很容易想到,如果i>2,同时num[i-1]与num[i]这两个数字是在11-26之间,那么dp[i] = dp[i-1]+dp[i-2]
2、容易出错的点在于对于0的判断,如果0开头,那么直接返回0,还有就是如果num[i]==0的时候,需要根据num[i-1]的值判断是该返回0,还是dp[i] = dp[i-2]。
其实这道题这样就已经做完了,但是
3、我先是看到了输入是String而不是int[],我以为输入中是可以带有字母的,而我用字母测试的时候,也是通过的。所以我的做法中带入了判断字母的部分,所以最后结果是2ms,并不是最快的1ms。
public class Solution {
public int numDecodings(String s) {
int len = s.length();
if( len == 0)
return 0;
else if( len == 1)
return s.charAt(0) == '0'?0:1;
int[] num = new int[len];
for( int i = 0;i<len;i++){
if( s.charAt(i) >= '0' && s.charAt(i) <='9')
num[i] = s.charAt(i)-'0';
else
num[i] = -1;
}
for( int i = 0;i <len ;i++)
num[i] = s.charAt(i)-'0';
int[] dp = new int[len];
if( num[0] == 0)
return 0;
else
dp[0] = 1;
if( num[1] == 0){
if( (num[0] >2 || num[0]<1) )
return 0;
else
dp[1] = 1;
}else if( (num[0] == 1 && num[1] > 0) || (num[0] == 2 && num[1]<7 && num[1] > 0))
dp[1] = 2;
else
dp[1] = dp[0];
for( int i = 2;i<len;i++){
if( num[i] == 0){
if( num[i-1] >2 || num[i-1] < 1 )
return 0;
else
dp[i] = dp[i-2];
}
else if( (num[i-1] == 1 && num[i] > 0) || (num[i-1] == 2 && num[i] < 7 ))
dp[i] = dp[i-1]+dp[i-2];
else
dp[i] = dp[i-1];
}
return dp[len-1];
}
}
下面是discuss中的某个代码,并没有判断字母。
public class Solution {
public int numDecodings(String s) {
if(s == null || s.length() == 0) {
return 0;
}
int n = s.length();
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = s.charAt(0) != '0' ? 1 : 0;
for(int i = 2; i <= n; i++) {
int first = Integer.valueOf(s.substring(i-1, i));
int second = Integer.valueOf(s.substring(i-2, i));
if(first >= 1 && first <= 9) {
dp[i] += dp[i-1];
}
if(second >= 10 && second <= 26) {
dp[i] += dp[i-2];
}
}
return dp[n];
}
}
leetcode 91 Decode Ways ----- java的更多相关文章
- leetcode@ [91] Decode Ways (Dynamic Programming)
https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...
- Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)
Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...
- 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 ...
- [LeetCode] 91. Decode Ways 解码方法
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- [leetcode]91. Decode Ways解码方法
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- Leetcode#91 Decode Ways
原题地址 动态规划题,注意0导致的小陷阱. 代码: int numDecodings(string s) { ] < ] > ; ] >= ] <= : ; ; int nex ...
- [LeetCode] 639. Decode Ways II 解码方法 II
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- 【LeetCode】91. Decode Ways 解题报告(Python)
[LeetCode]91. Decode Ways 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ...
- 91. Decode Ways
题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...
随机推荐
- 关于BIOS的一点东西
关于BIOS的一点东西 编辑删除转载2016-05-20 00:36:36 去把BIOS的每个单词意思都有道一遍就都明白了,BOOT是更改 启动顺序的(台式机一直按del键就会进入BIOS界面,用上下 ...
- JavaScript 时间特效 显示当前时间
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 用C++,调用浏览器打开一个网页
http://blog.csdn.net/heaven13483/article/details/9369029
- VS调试Ajax
VS调试Ajax: 1.ashx在后台处理程序中设定断点 2.触发AJAX 3.F12打开浏览器调试,搜索找到ajax调用的JS,设置断点,在浏览器中单步调试,会自动进入后台处理程序,然后就可以调试后 ...
- ios应用数据存储方式
一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对 ...
- Moto G如何进入开发者选项
最近买了个Moto G做应用开发,突然发现开发者选项居然没有,搜索了一下发现是Google隐藏了此选项. http://allaboutmotog.com/moto-g-how-to-guide/ac ...
- BZOJ 2252 矩阵距离
BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...
- 【Tsinghua OJ】灯塔(LightHouse)问题
描述 海上有许多灯塔,为过路船只照明.从平面上看,海域范围是[1, 10^8] × [1, 10^8] . (图一) 如图一所示,每个灯塔都配有一盏探照灯,照亮其东北.西南两个对顶的直角区域.探照灯的 ...
- EF中逆变和协变
EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS ...
- ERP反馈信息管理(十九)
前台显示的界面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Custo ...