题目:

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. (Medium)

分析:

开始想到的就是暴力搜索,但是超时了,所以考虑用动态规划来做。

符合单序列动态规划的特点,所以有

1. 状态:dp[i]表示前i个字符组成的子串可能的解码方式。

2. 初始化:dp[0] = 1, dp[1] = 1(s[0] != '0',因为没有0这个对应数字)

3. 递推关系

一般情况下:

if s[i - 1]与s[i -2]组成的在“1” ~“26”范围内, dp[i] = dp[i - 1] + dp[i - 2];

                   else, dp[i] = dp[i - 1];

但要注意的是,如果s[i - 1] == '0'需要特殊处理,当s[i - 2] == '1' || '2'时, dp[i] = dp[i - 2]

                       否则,则说明这个0没有对应位,这个字符串无法解码,直接返回0;

4.结果: dp[s.size()];

代码:

 class Solution {
public:
int numDecodings(string s) {
if (s.size() == ) {
return ;
}
int dp[s.size() + ];
dp[] = ;
if (s[] != '') {
dp[] = ;
}
for (int i = ; i <= s.size(); ++i) {
if (s[i - ] == '') {
if (s[i - ] == '' || s[i - ] == '') {
dp[i] = dp[i - ];
continue;
}
else {
return ;
}
}
if (s[i - ] == '' || (s[i - ] == '' && s[i - ] <= '') ) {
dp[i] = dp[i - ] + dp[i - ];
}
else {
dp[i] = dp[i - ];
}
}
return dp[s.size()];
}
};

2. 递推关系:

LeetCode91 Decode Ways的更多相关文章

  1. Leetcode91.Decode Ways解码方法

    一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1 ...

  2. [LeetCode] Decode Ways 解码方法

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

  3. [LintCode] Decode Ways 解码方法

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

  4. 44. Decode Ways && Gray Code

    Decode Ways A message containing letters from A-Z is being encoded to numbers using the following ma ...

  5. 91. Decode Ways

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

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

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

  7. leetcode面试准备:Decode Ways

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

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

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

  9. leetcode 639 Decode Ways II

    首先回顾一下decode ways I 的做法:链接 分情况讨论 if s[i]=='*' 考虑s[i]单独decode,由于s[i]肯定不会为0,因此我们可以放心的dp+=dp1 再考虑s[i-1] ...

随机推荐

  1. CSP-S 2019 Day 2 T3 树的重心

    CSP-S 2019 Day 2 T3 树的重心 题 给出了一个大小为\(n\)的树,树中结点从 1∼n 编号.小简单的课后作业是求出这棵树单独删去每条边后,分裂出的两个子树的重心编号和之和. \(n ...

  2. Ionic Cordova 环境配置window

    1.安装java jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2.安 ...

  3. Django项目:CRM(客户关系管理系统)--39--31PerfectCRM实现King_admin编辑多对多限制

    readonly_fields = ('qq', 'consultant','tags',) # 不可修改 # forms.py # ————————19PerfectCRM实现King_admin数 ...

  4. 文件上传之Java篇

    最近做了一个下载文档的功能,于是联想到了上传功能,于是自己研究了一下后台语言是java的情况下怎样实现将文件上传到指定的目录,以下是项目的语言: 1.后台用jfinal框架 2.前台用jquery提交 ...

  5. FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

    自从继承了hibernate ,全都是些奇葩问题. 努力解决中,先发布,以备忘

  6. JAVA Sftp 上传下载

    SftpUtils package xxx;import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com ...

  7. vuex的简单教程

    首先安装vuex npm install vuex --save 然后创建store.js文件里写 import Vue from 'vue' import Vuex from 'vuex' Vue. ...

  8. innerhtml outhtml innerText outText 区别

    innerHTML获取标签内的HTML outerHTML获取标签及标签内的HTML innerText 设置或获取位于对象起始和结束标签内的文本 outerText 设置(包括标签)或获取(不包括标 ...

  9. 2018-2-13-wpf-PreviewTextInput-在鼠标输入获得-_u0003

    title author date CreateTime categories wpf PreviewTextInput 在鼠标输入获得 � lindexi 2018-2-13 17:23:3 +08 ...

  10. 双系统删除ubuntu

    我的电脑安装了双系统,Windows和Linux,不过由于Linux在最近一段时间内不会使用,所以我打算删除Linux.    删除Linux最需要注意的地方,就是MBR(Master Boot Re ...