91. Decode Ways | Java最短代码实现
2016-03-22 20:39
441 查看
原题链接:91. Decode Ways
【思路】
本题考查动态规划。用nums数组记录解码种数,nums[i]表示到第 i 个字符,字符串s的解码种数,它由 nums[i - 1]和 nums[i - 2]的解码种数之和,但是会有一些限制,限制条件就是for循环中的2个if语句(第 i - 1个字符的值不能为0,第 i - 2和第 i - 1表示的2位数是大于0,且小于27的):
cases passed. Runtime: 7
ms Your runtime beats 6.42% of javasubmissions.
【补充】
递归法超时:
【思路】
本题考查动态规划。用nums数组记录解码种数,nums[i]表示到第 i 个字符,字符串s的解码种数,它由 nums[i - 1]和 nums[i - 2]的解码种数之和,但是会有一些限制,限制条件就是for循环中的2个if语句(第 i - 1个字符的值不能为0,第 i - 2和第 i - 1表示的2位数是大于0,且小于27的):
public int numDecodings(String s) { if (s == null || s.length() == 0) return 0; int[] nums = new int[s.length() + 1]; nums[0] = 1; nums[1] = s.charAt(0) != '0' ? 1 : 0; for (int i = 2; i <= s.length(); i++) { if (s.charAt(i - 1) != '0') nums[i] = nums[i - 1]; if (s.charAt(i - 2) != '0' && Integer.parseInt("" + s.charAt(i - 2) + s.charAt(i - 1)) < 27) nums[i] += nums[i - 2]; } return nums[s.length()]; }259 / 259 test
cases passed. Runtime: 7
ms Your runtime beats 6.42% of javasubmissions.
【补充】
递归法超时:
public int numDecodings(String s) { int[] ways = new int[1]; dfs(s, 0, ways); return ways[0]; } private void dfs(String s, int curIndex, int[] ways) { if (s.length() > 0 && curIndex == s.length()) ways[0]++; String temp = ""; for (int i = curIndex; i < s.length(); i++) { temp += s.charAt(i); if (Integer.parseInt(temp) < 1 || Integer.parseInt(temp) > 26) break; dfs(s, i + 1, ways); } }欢迎优化!
相关文章推荐
- JAVA设计模式:简单静态工厂方法模式
- Java读取远程服务器文件到本地
- Java之封装、继承、多态(重载、重写)
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- java web :Context initialization failed
- eclipse中如何查看sdk
- Java开发之简单数据类型
- 关于Java和C#的内部类的小记
- 多线程——Java多线程实现的三种方式
- Java keyword具体解释
- JDK的安装与环境变量配置
- Java 设计模式-工厂模式
- Java基础算法集50题
- java中的坐标转换及测距
- Java读取图片Metadata元数据Exif
- Java的多线程机制系列:不得不提的volatile及指令重排序
- 多线程之指令重排序
- MyEclipse快捷键大全
- 在Myeclipse buildpath 加server lib
- Java——接口