[LeetCode] Decode Ways
(Version 0.0)
Decode Ways这道题从原理上说是一个比较简单的一维DP题目,用一个一维数组的元素dp[i] (i >= 1)来记录从头开始长度为i的substring有多少种decode ways。
不过实际操作起来第一次写还是在输入为"0"时犯了错误,另外第一次写的时候没有意识到当可以构成"10"和"20"时dp[i]要等于dp[i - 2],而不能取dp[i - 1] + dp[i - 2],另外一个易错点是对于dp[0]的初始化,应该为1而不是0。整体感觉这题只要是有DP的思维就不难,但是要考虑清楚各种情况的取舍以及corner case。代码如下:
1 public class Solution { 2 public int numDecodings(String s) { 3 if (s.length() < 2) { 4 return s.equals("0") ? 0 : s.length(); // don't forget to check if s is "0" 5 } 6 int[] dp = new int[s.length() + 1]; 7 dp[0] = 1; // be careful with this initialization 8 dp[1] = s.charAt(0) == '0' ? 0 : 1; 9 for (int i = 2; i < dp.length; i++) { 10 int val = Integer.valueOf(s.substring(i - 2, i)); 11 if (val == 0) { 12 return 0; 13 } else if (val <= 9) { 14 dp[i] = dp[i - 1]; 15 } else if (val < 27) { 16 if (val % 10 == 0) { 17 dp[i] = dp[i - 2]; 18 } else { 19 dp[i] = dp[i - 1] + dp[i - 2]; 20 } 21 } else { 22 if (val % 10 == 0) { 23 return 0; 24 } else { 25 dp[i] = dp[i - 1]; 26 } 27 } 28 } 29 return dp[dp.length - 1]; 30 } 31 }
循环内的思路大致是,如果当前char不能和前一个char组成合法数字时,dp[i] = dp[i - 1];如果当前char为0且前一个也为0或者前一个char大于2,则此decoding invalid,可以直接返回0;如果当前char可以和前一个char组成合法数字,则需要把前两个dp中的元素相加作为当前元素的值,因为在之前的子串上加上当前char可以增添两种可能性,即与前一个char结合或者不结合,如果结合,则有dp[i - 2]种,不结合则有dp[i - 1]种,所以总共是dp[i - 1] + dp[i - 2]种。
转载于:https://www.cnblogs.com/icecreamdeqinw/p/4325487.html
[LeetCode] Decode Ways相关推荐
- [leetcode]Decode Ways
动态规划.要注意way+=dp[i-1]或dp[i-2]以及way+=1的条件.我看有的人把数组命名为count的. public class Solution {public int numDeco ...
- LeetCode Decode Ways(动态规划)
题意:编码方式为a->1,...z->26,给出编码后的数字字符串,问有多种编码方式 思路:用dp(i)表示从第1个字符到第i个字符时的编码方式,因为编码一个字符时,只能是0-9,编码两个 ...
- LeetCode Decode Ways
有点意思的题目.用动态规划能够O(n)求解出来:a[i]代表子字符串string(0,i)的可能解码方式,a[i] = {a[i-1] or a[i-1]+a[i-2]}. 意思是假设string(i ...
- 【重点!DP】LeetCode 639. Decode Ways II
LeetCode 639. Decode Ways II 参考网址:https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-639-d ...
- 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...
- [LeetCode]91.Decode Ways
题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A ...
- 【LeetCode】91. Decode Ways 解题报告(Python)
[LeetCode]91. Decode Ways 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ...
- Decode Ways leetcode java
题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...
- 91 Decode Ways
为什么我常常对做题产生恐惧,因为可能为了一个不算难的问题不知不觉绕进去2个小时,这显然是不值得的.这题就是如此. 还要注意,java && 的优先级高于||的优先级,而不是同级. pu ...
最新文章
- 深入理解SpringCloud之配置刷新
- Element 'dependency' cannot have character [children], because the type's content type is element-on
- Tomcat虚拟目录的配置
- TensorFlow 1.12.2 发布,修复 GIF 构造安全漏洞
- idea 执行 java jar_idea打包java可执行jar包的实现步骤
- Magento创建多语言店铺的方法
- MATLAB函数 zp2tf详解
- 拼多多上市关你什么事?
- matlab肆,matlab入门教程
- SoapUI接口测试断言
- OS + Win Office / word / excel / ppt / powerpoint / keyboard_shortcut
- Treap树应用-bzoj 1862 GameZ游戏排名系统问题
- 以大TMS运输配送管理系统
- 2021-05-11 MongoDB面试题 MongoDb中索引是什么
- 大数据学习一般学什么
- 套路(Jony J)
- MySQL之主键ID生成策略
- 个人简历--软件工程师 4年
- YII2.0的I18N/L10N是干什么的?是如何工作的?底层原理是什么?
- 数据分析工程师需要考虑的问题