题目链接:https://leetcode-cn.com/problems/decode-ways/description/

参考:https://www.jianshu.com/p/5a604070cd11

题目大意:将一串数字,编码成A-Z的字符串。因为12-->L,或者12-->AB。所有12转成字符串一共有两种方式。该题目是求一共有多少种方案,所以可以使用dp方法。如果是求具体方案,则需要使用dfs。

状态转移方程:

(1) dp[0] = 0(2) dp[1] = 1, if str[1] is valid dp[1] = 0, if str[1] is not valid (3) dp[n] = 0

if str[n] is valid
    dp[n] += dp[n - 1]
if str[n - 1] combine str[n] is validdp[n] += (i - 2 == 0) ? 1 : dp[n - 2]
dp[i]:前面i个字符串可以转义成多少种密文。
    public int numDecodings(String s) {if (s.length() == 0 || s == null || s == "0")return 0;int[] dp = new int[s.length() + 1];dp[0] = 1;if (isValid(s.substring(0, 1)))dp[1] = 1;elsedp[1] = 0;for (int i = 2; i <= s.length(); i++) {if (isValid(s.substring(i - 1, i)))dp[i]= dp[i - 1];if (isValid(s.substring(i - 2, i)))dp[i]= dp[i - 2]+dp[i];}return dp[s.length()];}public boolean isValid(String s) {if (s.charAt(0) == '0')return false;int code = Integer.parseInt(s);return code >= 1 && code <= 26;}

扩展一下:如果不需要时间限制,并且需要求出具体方案。则需要使用dfs算法求出具体方案。

注意:Java中的substring(beginIndex,endIndex):大概意思返回 [beginIndex,endIndex)区间的值。所以endIndex的最大值可以是字符串的程度。

Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.

Examples:

 "hamburger".substring(4, 8) returns "urge""smiles".substring(1, 5) returns "mile" System.out.println("226".substring(3, 3));//返回为""(空)
接下来使用dfs计算出所有的可能的方式。
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;public class Solution {static LinkedList<String> list = new LinkedList<String>();static LinkedList<LinkedList<String>> ans = new LinkedList<LinkedList<String>>();Map<String, String> map = new HashMap<String, String>();public int numDecodings(String s) {ans.clear();char[] alphatableb = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I','J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U','V', 'W', 'X', 'Y', 'Z' };for (int i = 0; i < alphatableb.length; i++) {map.put(i + 1 + "", alphatableb[i] + "");}dfs(s);return ans.size();}private void dfs(String s) {if (s.isEmpty() || s.length() == 0) {LinkedList<String> tmp = new LinkedList<String>();tmp.addAll(list);ans.add(tmp);return;}for (int i = 1; i <= 2&&i<=s.length(); i++) {String str = s.substring(0, i);if (isValid(str)) {String ss = map.get(str);list.add(ss);dfs(s.substring(i, s.length()));list.pollLast();} else {return;}}}public boolean isValid(String s) {if (s.charAt(0) == '0')return false;int code = Integer.parseInt(s);return code >= 1 && code <= 26;}public static void main(String[] args) {System.out.println("226".substring(3, 3));int len = new Solution().numDecodings("226");System.out.println(len);System.out.println(ans);}}

转载于:https://www.cnblogs.com/clarencezzh/p/10110159.html

动态规划之91 decode ways相关推荐

  1. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways

    LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...

  2. [LeetCode]91.Decode Ways

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

  3. 【LeetCode】91. Decode Ways 解题报告(Python)

    [LeetCode]91. Decode Ways 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ...

  4. 91 Decode Ways

    91 Decode Ways dp解法 O(1) space class Solution:# @param {string} s# @return {integer}def numDecodings ...

  5. 91 Decode Ways

    为什么我常常对做题产生恐惧,因为可能为了一个不算难的问题不知不觉绕进去2个小时,这显然是不值得的.这题就是如此. 还要注意,java && 的优先级高于||的优先级,而不是同级. pu ...

  6. leetcode 91. Decode Ways | 91. 解码方法(动态规划)

    题目 https://leetcode.com/problems/decode-ways/ 题解 dp 问题,首先用模拟的办法试一下,理清楚状态转移关系. 当走到 i 位置时,i 有两种选择: i 不 ...

  7. # 91 Decode Ways

    Description A message containing letters from A-Z can be encoded into numbers using the following ma ...

  8. LeetCode 91. Decode Ways

    问题链接 LeetCode 91 题目解析 A~Z对应数字1~26,给出一段数字串,求破译方法数. 解题思路 动态规划.关键在于分类,定义 \(dp[i]\) 为前i个字符的解密方法数,初始化为0. ...

  9. 【leetcode】91. Decode Ways A-Z的字母表示1-26的数字,反向破解多少种字符串的可能性...

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

最新文章

  1. intel 82579v驱动下载_最新INTEL和AMD平台轻松安装WIN7,集成M.2和USB3.0驱动
  2. tomcat配置mysql数据源_Tomcat中配置mysql数据源
  3. gcc -l:手动添加链接库
  4. Oracle 11gR2 RAC的两个bug
  5. java从入门到精通 韩顺平_韩顺平Java从入门到精通视频教程(94集)
  6. thinkpad E40 的 C1门
  7. 试题库管理系统--数据库设计
  8. 记录从微信商户获取微信支付账单过程
  9. uni-app 评论五星
  10. 区块链游戏- Solcery(Summoner 召唤者)
  11. mysql的pv跟pc_PC板PV板PVC板PPV板区别与用途
  12. Nolanjdc对接傻妞教程
  13. git代码从A库某分支迁到B库某分支(亲测有效)
  14. php 改数字 例如10000变成1万
  15. 基于盲估计和ICA的单通道盲分离算法–Matlab仿真
  16. 小学计算机教案模板范文,小学信息技术教案模板锦集5篇范本
  17. 安卓Android开发:使用AudioRecord录音、将录音保存为wav文件、使用AudioTrack保存录音
  18. rust刷卡点地图_新版rust地图物资 | 手游网游页游攻略大全
  19. 08弹性哈希供应加剧了自私挖矿攻击
  20. 维修RC-DS10K东芝IH电饭煲-温度保险丝断开了-维修笔记

热门文章

  1. [No0000101]JavaScript-基础课程1
  2. UGUI滚动列表ScrollView使用注意点
  3. mysql----innodb统计信息
  4. 面向对象三大特征之继承(extends)——Java笔记(六)
  5. (转)C# 把我所积累的类库全部分享给博友(附件已经上传)
  6. python实例31[文件夹清理]
  7. Android 设备的CPU类型(通常称为”ABIs”)
  8. 利用FormData对象实现AJAX文件上传功能及后端实现
  9. Atititi tesseract使用总结
  10. ***PHP 去除换行符