[dp] LeetCode 91. Decode Ways

输入:一个字符串,只包含0-9的字符。
输出:解码种类
规则:有一种信息映射规则 A->1,B->2…Z->26。
例如输入’1’,只能解码为A。
输入’12’,可以解码为’AB’,也可以是’L’,有2种解码方式。
分析:这一个分析思路很自然,但是很麻烦,最后还是有逻辑漏洞(有漏洞是因为没有把情况考虑全了)。
向这种多阶段完成的题目已经做过很多,不假思索就是这样想的。
如果需要解码’12128’这个字符串,
如果只有1,一种解法:A
如果是12,可以看做1+2,也可以看做12。解码就是A+B,或者L。
如果是121,可以看做是12+1,也可以看做是1+21。
 如果是12+1,解法种类等于12的解法:2。
 如果是1+21,解法种类等于1的解法:1。
 最终结果是3。
如果是1212,可以看做是121+2,也可以看做是12+12。
 如果是121+2,解法种类等于121的解法:3。
 如果是12+12,解法种类等于12的解法:2。
 最终结果是5。
如果是12127,可以看做是1212+7,也可以看做是121+27?错了,27没有对应的字母,所以只有1212+7这一种。
 如果是1212+7,解法种类等于1212的解法:5。
看到这里其实动态转移方程已经出来了。

当s[i] !=0 的时候:
dp[i]=dp[i-1]+dp[i-2],这是当Number(i-1,i)<=26的时候。
dp[i]=dp[i-1] 这是当Number(i-1,i)>26的时候。

对0字符还没有考虑,0没有对应的字母,那结果是怎样的?
对于’012’,因为0没有对应直接返回0。也就是0在首位,直接返回0。
对于’10’,可以分解为10+2两个部分,解码为’JB’,答案为1。
对于’210’,可以分解为2+10两个部分,分解数量和’2’是一样的,也就是dp[i] = dp[i-2]。
对于’280’,没有分解策略,应该返回0。
对于’100’,分解为10+0不对,0没有映射,分解为1+00,同样不对,0还是没有映射。应该直接返回0。

当s[i] ==0的时候:
if Number(i-1,1)<=26,那么dp[i] = dp[i-2]if Number(i-1,1)>26,则返回0。
if 两个连续的0挨着,则返回0。
if 0在第0个位置,则无效,返回0。

这道题目和爬楼梯是一个类型,只是有更多的限制条件。需要将各种情况思考一遍。参考链接。

	public int numDecodings(String s) {if(s==null || s.length()==0 ) return 0;int  n = s.length();int[] dp = new int[n];if(s.charAt(0)=='0') return 0;dp[0] = 1;if(n>1){if(s.charAt(1)=='0'){if(s.charAt(0)=='0'){return 0;}else if((s.charAt(0) - '0')*10 + (s.charAt(1) - '0')<=26){dp[1] = dp[0];}else{return 0;}}else{dp[1] = (s.charAt(0) - '0')*10 + (s.charAt(1) - '0')<=26?dp[0]+1:1;}            }for(int i =2;i<n;i++){if(s.charAt(i)=='0'){if(s.charAt(i-1)!='0' && (s.charAt(i-1) - '0')*10 + (s.charAt(i) - '0')<=26){dp[i] = dp[i-2];}else {return 0;}}else{if(s.charAt(i-1)=='0'){dp[i] = dp[i-1];}else if( (s.charAt(i-1) - '0')*10 + (s.charAt(i) - '0')<=26){dp[i] = dp[i-1] +dp[i-2];}else{dp[i] = dp[i-1] ;}}}return dp[n-1];}

分析2:从后往前看。参考链接。

例子依然是字符串’12128’
8:解法总数(8)=1
28:2+8,解法总数(28)=解法总数(8)
128:1+count(‘28’),或者12+8,解法总数(128)=解法总数(28)+解法 总数(8)
2128: 2+128;21+count(28),解法总数(2128)=解法总数(128)+解法 总数(28)

字符串’012’
2
12: 12 或者 1+2
012:0和谁都不能分到一起解码,所以为0。

字符串 ‘100’
0:答案0
00 :答案 0
100:答案 0 因为前两步都是0

字符串’1002’

当字符中包含0,对于当前位置不等于0的来说,number(i,i+1)<=26的话,解法总数(i)=解法总数(i+1)+解法总数(i+2),和上面的规则是相符 的。这样来考虑就简单了许多。
这样从后向前考虑问题,以及对于0的处理,都是要学习的地方 。

	public int numDecodings(String s) {if(s==null || s.length()==0 ) return 0;int  n = s.length();int[] dp = new int[n+1];dp[n] = 1;dp[n-1] = s.charAt(n-1)=='0'?0:1;for(int i=n-2;i>=0;i--){if(s.charAt(i)=='0'){dp[i] = 0;}else if((s.charAt(i)-'0')*10 + (s.charAt(i+1)-'0')<=26){dp[i] = dp[i+1]+dp[i+2];}else{dp[i] = dp[i+1];}}return dp[0];}

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

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

相关文章

leetcode——背包问题汇总

本章来汇总一下leetcode中做过的背包问题&#xff0c;包括0-1背包和完全背包。 背包问题的通常形式为&#xff1a;有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。求解将哪些物品装入背包里物品价值总和最大。0-1背包和…

[密码学基础][每个信息安全博士生应该知道的52件事]52.先进的应用概念 系统的大致安全需求

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。我们希望学生知道从理论到实践的各个方面。但关键是你需要在密码学中考虑的不仅是对遵守规则的玩家的安全&am…

spring学习(32):使用junit4测试

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

[dp]Leetcode 5. Longest Palindromic Substring

输入&#xff1a;一个字符串s 输出&#xff1a;最长的回文子串 规则&#xff1a;“abba"是一个回文 分析&#xff1a;输入是"babad”&#xff0c;输出"bab"。这个问题不能再按照之前分段的思路解决&#xff0c;或者说完全按照之前的思路。 之前的思路是&a…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]38.隐蔽信道和侧信道的区别

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 隐蔽信道和侧信道是两种不同的信息泄露信道 隐蔽信道使用目的不是通信的机制。例如&#xff0c;写和检查文…

NFA和DFA的区别

NFADFA初始状态不唯一唯一弧上的标记字(单字符字/ε)字符(串)转换关系非确定确定对于每个NFA M都存在一个DFA M 使得 L(M) L(M) 转载于:https://www.cnblogs.com/masterchd/p/11061281.html

spring学习(33):id和name

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

线性回归与 logistic回归

线性回归 算法方程&#xff1a;hθ(x)∑i0nθixiθTxh_{\theta}(x)\sum_{i0}^{n} \theta_{i} x_{i}\theta^{T} xhθ​(x)∑i0n​θi​xi​θTx 损失函数&#xff1a;J(θ0,θ1,…,θn)12m∑i1m(hθ(x(i))−y(i))2J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{n}\right)\f…

[高效时间管理] 番茄工作钟 windows版本

【背景】 2019年本人学会了记录每日时间&#xff08;将每日分割成半小时一段的时间&#xff09; &#xff0c;但似乎是为了完成而完成&#xff0c;效果不佳&#xff0c;手机端的番茄钟总是诱惑太多&#xff0c;就在准备tb计时器的时候&#xff0c;发现了宝藏软件。 个人整理知…

IDEA设置取消自动显示参数提示

IDEA设置取消自动显示参数提示 最近在使用IDEA的过程中&#xff0c;发现方法中一直显示形参名的提示&#xff0c;无法选中&#xff0c;也无法删除&#xff0c;基于不同人的使用习惯不同&#xff0c;有的人不喜欢这种提示&#xff0c;我也在网上寻找各种解决方案&#xff0c;由于…

spring学习(34):构造函数依赖注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

[高效时间管理]复盘篇

【背景】 2019年本人在公众号中阅读了《时间管理&#xff0c;这篇就够了》&#xff0c;学习了其中的内容并开始记录每日所做&#xff0c;偶尔晚上进行复盘&#xff0c;对督促学习和反思起到一定的作用&#xff0c;故向大家分享经验。 为什么要时间管理&#xff1f; 时间管理…

PHP内存管理机制与垃圾回收机制

转载&#xff1a;https://www.cnblogs.com/zk0533/p/5667122.html PHP内存管理机制 var_dump(memory_get_usage()); //获取内存 $a "laruence"; //定义一个变量 var_dump(memory_get_usage()); //定义变量之后获取内存 unset($a); …

139. Word Break

目录题目描述分析暴力搜索记忆化回溯动态规划题目描述 给定一个字符串数组作为词典&#xff0c;再给定一个字符串。判断一下用词典中的词是不是可以组成这个字符串。 注意&#xff1a;词典中的词可以使用多次&#xff1b;词典中不存在重复的词 例如&#xff1a; 输入: s “le…

spring学习(35):c名称空间注入

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

Element-UI 表单验证规则rules 配置参数说明

官方文档 : https://github.com/yiminghe/async-validator转载于:https://www.cnblogs.com/itstac/p/11063125.html

[能力提升][费曼学习法]学习方法

【背景知识】 费曼学习法 费曼学习法可以简化为四个单词&#xff1a;Concept &#xff08;概念&#xff09;、Teach &#xff08;教给别人&#xff09;、Review &#xff08;评价&#xff09;、Simplify &#xff08;简化&#xff09;。 第一步&#xff1a;把它教给一个小孩…

338. Counting Bits

输入&#xff1a;一个正整数n 输出&#xff1a;一个数组 规则&#xff1a;输出的数组分别表示0<x<n0<x<n0<x<n&#xff0c;范围内x的二进制表示中有多少个1。 示例&#xff1a;输入2&#xff0c;输出[0,1,1]。 分析&#xff1a;这道题目很直观。如果计算数字…

spring学习(36):注入简单类型

目录结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…

【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offer][JAVA]面试题第[05]题[替换空格][StringBuilder/Buffer] [剑指offer][JAVA]面试题第[06]题[从尾到头打印链表][栈][递归] [剑指…