动态规划之91 decode ways

题目链接: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server中的STUFF函数的使用

STUFF ( character_expression , start , length ,character_expression ) 参数 character_expression 一个字符数据表达式。character_expression 可以是常量、变量&#xff0c;也可以是字符列或二进制数据列。start 一个整数值&#xff0c;指定删除和插入的开始位置。如果 st…

递归是会更秀strtok

前几天发的字符串反转题目&#xff0c;后面有一个新同学用了递归的方法来实现&#xff0c;看了下&#xff0c;真的是很秀。之前字符串反转的题目代码如下#include "stdio.h" #include "string.h" char input[] {"the sky is blue cris 1212321 apple…

判断输入的IP地址是否合法

判断输入的IP地址是否合法&#xff0c;ip地址的值在0~255之间&#xff0c;先把输入的IP的地址转换为一个字符串。 #define LEN (sizeof(xx)/sizeof(xx[0])) const char *xx[] {"192.168.1.1", "10.0.0.1", "127.256.0.1", "iugerjiogjioe…

偶作无题词一首

偶作无题词一首 读史籍&#xff0c;捉摸当初元璋。谈兴衰&#xff0c;寻思后来泽东。展抱负&#xff0c;携智巧&#xff0c;弄权谋&#xff0c;兴武功&#xff0c;万邦惊诧。立业不立身&#xff0c;立言不立行&#xff0c;枭雄本色。搏四海&#xff0c;威肃九州&#xff0c;建基…

ios开发网络篇—HTTP协议 - 转

一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) &#xff0c;通过1个URL&#xff0c;能找到互联网唯一的1个资源 &#xff0c;URL就是资源的地址&#xff0c;位置&#xff0c;互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP&#…

总结的一些内存问题

前言之前在实习时&#xff0c;听了 OOM 的分享之后&#xff0c;就对 Linux 内核内存管理充满兴趣&#xff0c;但是这块知识非常庞大&#xff0c;没有一定积累&#xff0c;不敢写下&#xff0c;担心误人子弟&#xff0c;所以经过一个一段时间的积累&#xff0c;对内核内存有一定…

云计算-从基础到应用架构系列-云计算的演进

为什么80%的码农都做不了架构师&#xff1f;>>> 开篇 本篇是主要讲述云计算的发展历程&#xff0c;由于云计算本身提出来也不是太久&#xff0c;并且其实云计算也是经过前人的一些经验总结提出&#xff0c;所以我们对之前的一 些计算机的发展史有个一定的了解&…

Linux下的基本常用命令解析

1.查进程ps命令查找与进程相关的PID号&#xff1a;ps a 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时&#xff0c;显示每个程序真正的指令名称&#xff0c;而不包含路径&#xff0c;参数或常驻服务的标示。ps -e 此参数的效…

常用数据库脚本

SqlServer&#xff1a;1、修改数据库排序规则&#xff0c;改成中文方式(如果是英文方式的话&#xff0c;直接写insert插入中文会有问题的&#xff0c;需要使用insert into Table_1 values(N中文)的方式)Alter database master COLLATE Chinese_PRC_CI_AS;修改之后对于这个库中的…

这样理解mmap,挺有意思!

大概雍正皇帝怎么也不会想到&#xff0c;自己在西历2022年的男生和女生眼里&#xff0c;会是截然不同的两种形象。1以我对身边同学朋友的观察&#xff0c;男生们大多爱看《雍正王朝》&#xff0c;他们眼中的雍正&#xff0c;大约是个推行了“火耗归公”、“摊丁入亩”等遏制贪腐…

软件开发中的11个系统思维定律

为什么80%的码农都做不了架构师&#xff1f;>>> http://sd.csdn.net/a/20101217/284119.html?1292550154 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案&#xff08;Today’s problems come from yes…

boost.asio防止恶意空连接的方法

转载&#xff1a;http://blog.csdn.net/educast/article/details/13167847 网络服务器通常要应对一些意外情况&#xff0c;如空连接行为&#xff0c;指在遇到客户端连接后不进行任何操作&#xff0c;并很可能在大量空连接情况下导致服务器资源耗尽而无法工作。以下代码主要工作…

赢在中国 (2008-3-19)

赢在中国又换在10点&#xff0c;前面几分钟没有看到。虽然我一直不看好32号老董&#xff0c;但是我还是很好奇看看他是怎么样让自己又一次成为众人的对立面的。 我觉得32号和04号都不是心胸宽广之辈&#xff0c;但至少04号比32号真诚&#xff0c;只是他还没有修炼到32号的厚厚的…

为什么我对流程情有独钟?

写这个标题的原因是我有一个同事兼朋友&#xff0c;他的名字刚好和流程谐音&#xff0c;最近他刚离职回苏州工作&#xff0c;在球场下&#xff0c;他是我的良师益友&#xff0c;在球场上&#xff0c;他是我们可以信任的队友&#xff0c;我们不仅一次把比我们高大、速度比我们快…

UVa-401-Palindromes(回文)

这一题的话我们可以把映像字符的内容给放入一个字符串常量里面&#xff0c;然后开辟一个二维的字符串常量数组&#xff0c;里面放置答案。 对于回文实际上是很好求的&#xff0c;对于镜像的话&#xff0c;我们写一个返回char的函数&#xff0c;让它接收一个char。 接收之后进行…

C#中获取当前时间:System.DateTime.Now.ToString()用法

//2008年4月24日System.DateTime.Now.ToString("D");//2008-4-24System.DateTime.Now.ToString("d"); //2008年4月24日 16:30:15System.DateTime.Now.ToString("F");//2008年4月24日 16:30System.DateTime.Now.ToString("f"); //2008-…

基于boost asio实现的支持ssl的通用socket框架

情景分析现已存在一个可用稳定的异步客户端类http_client_base&#xff0c;该类基于boost asio实现了连接服务器&#xff0c;发送请求&#xff0c;获取响应和解析http数据等操作&#xff0c;该类的大致实现框架如下1classhttp_client_base 2{ 3public: 4 http_client_ba…

C#创建简单的验证码

首先&#xff0c;创建一个CLASS类&#xff0c;然后需要add Reference的方式添加 System.Drawing&#xff08;画画的类&#xff09; 方法代码如下&#xff1a; 1/**//**//**//// <summary> 2 /// 定义显示的随机字符 3 /// </summary> 4 /// &…

昨天的事情想说一下

发那篇文章的目的昨天发文章之后&#xff0c;我的一个好朋友微信找我&#xff0c;跟我说了很多关于文章的事情&#xff0c;所以&#xff0c;我自己也思考了许多。关于泄愤这个事情&#xff0c;我还是挺想说的。可能很多人看到了一个不好的东西&#xff0c;然后网上发发这个&…

Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...

题目链接&#xff1a; https://codeforces.com/contest/1093/problem/G 题目&#xff1a; 题意&#xff1a; 在k维空间中有n个点&#xff0c;每次给你两种操作&#xff0c;一种是将某一个点的坐标改为另一个坐标&#xff0c;一种操作是查询[l,r]中曼哈顿距离最大的两个点的最大…