LeetCode:Decode Ways 解题报告
Decode Ways
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.

SOLUTION 1:
我们使用DP来处理这个题目。算是比较简单基础的一维DP啦。
1. D[i] 表示前i个字符能解的方法。
2. D[i] 有2种解法:
1). 最后一个字符单独解码。 如果可以解码,则解法中可以加上D[i - 1]
2). 最后一个字符与上一个字符一起解码。 如果可以解码,则解法中可以加上D[i - 2]
以上2种分别判断一下1个,或是2个是不是合法的解码即可。
public class Solution {
public int numDecodings(String s) {
if (s == null || s.length() == 0) {
return 0;
}
int len = s.length();
// D[i] 表示含有i个字符的子串的DECODE WAYS.
int[] D = new int[len + 1];
D[0] = 1;
for (int i = 1; i <= len; i++) {
D[i] = 0;
// 现在正在考察的字符的索引.
int index = i - 1;
// 最后一个字符独立解码
if (isValidSingle(s.charAt(index))) {
D[i] += D[i - 1];
}
// 最后一个字符与上一个字符一起解码
if (i > 1 && isValidTwo(s.substring(index - 1, index + 1))) {
D[i] += D[i - 2];
}
}
return D[len];
}
public boolean isValidSingle(char c) {
if (c >= '1' && c <= '9') {
return true;
}
return false;
}
public boolean isValidTwo(String s) {
int num = Integer.parseInt(s);
return (num >= 10 && num <= 26);
}
}
2015.1.3 redo:
public class Solution {
public int numDecodings(String s) {
if (s == null || s.length() == 0) {
return 0;
}
int len = s.length();
// The result of first i digits.
int[] D = new int[len + 1];
for (int i = 0; i <= len; i++) {
if (i == 0) {
D[i] = 1;
} else {
// i >= 1
D[i] = 0;
if (i >= 2 && isValid(s.substring(i - 2, i))) {
D[i] += D[i - 2];
}
// The digit should not be 0.
if (s.charAt(i - 1) != '0') {
D[i] += D[i - 1];
}
}
}
return D[len];
}
public boolean isValid(String s) {
int num = Integer.parseInt(s);
return num >= 10 && num <= 26;
}
}
SOLUTION 2:
http://www.ninechapter.com/solutions/
GITHUB:
https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/dp/NumDecodings.java
LeetCode:Decode Ways 解题报告的更多相关文章
- 【LeetCode】91. Decode Ways 解题报告(Python)
[LeetCode]91. Decode Ways 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ...
- [LeetCode] Decode Ways 解题思路
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- LeetCode: Combination Sum 解题报告
Combination Sum Combination Sum Total Accepted: 25850 Total Submissions: 96391 My Submissions Questi ...
- [LeetCode] Decode Ways 解码方法
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- [LeetCode] Decode Ways II 解码方法之二
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- 【LeetCode】Permutations 解题报告
全排列问题.经常使用的排列生成算法有序数法.字典序法.换位法(Johnson(Johnson-Trotter).轮转法以及Shift cursor cursor* (Gao & Wang)法. ...
- LeetCode - Course Schedule 解题报告
以前从来没有写过解题报告,只是看到大肥羊河delta写过不少.最近想把写博客的节奏给带起来,所以就挑一个比较容易的题目练练手. 原题链接 https://leetcode.com/problems/c ...
- LeetCode: Sort Colors 解题报告
Sort ColorsGiven an array with n objects colored red, white or blue, sort them so that objects of th ...
- 【LeetCode】535. Encode and Decode TinyURL 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:数组 方法二:字典 日期 题目地址:https://l ...
随机推荐
- openerp 7.0 来自外部的邮件会发送二次问题解决方法
插入代码:\addons\mail\mail_mail.py #309 line this = self.pool.get('res.users').browse(cr, uid, uid, cont ...
- servlet实现文件上传,预览,下载和删除
一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...
- Java中将InputStream读取为String, 各种方法的性能对比
如下, 一共存在11种实现方式及其对应的性能测试结果: 1. 使用IOUtils.toString (Apache Utils) String result = IOUtils.toString(in ...
- bss段,代码段及数据段,堆栈段的区别
bss段,代码段及数据段,堆栈段的区别 时间:2012-11-21 10:0772人阅读 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英 ...
- hibernate4无法保存数据
hibernate4无法保存数据 author: hiu 以后都发文章我都备注一下作者了,hiu就是我了 红色字体更新日期:2014-07-08 初次使用hibernate4,使用getCurrent ...
- 深入PHP内核之array_multisort
这个函数是我第一次看手册的时候,没看明白是怎么回事,所以有必要记录一下 用法 bool array_multisort ( array &$arr [, mixed $arg = SORT_A ...
- PAT 1086 Tree Traversals Again
PAT 1086 Tree Traversals Again 题目: An inorder binary tree traversal can be implemented in a non-recu ...
- js访问url和cookie
function QueryString() { var data = []; this.Read = function() { var aPairs, aTmp; var queryString = ...
- JavaScript 中定义变量时有无var声明的区别
关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...
- android离线地图源码
最近一直在玩Android手机,当然也忘不了在这个平台下搞些和地图相关的东西. Android手机自带了Google的地图软件,不过原来不支持离线浏览,所以很费流量,5.0版本以后可以支持离线浏览,需 ...