您的位置:首页 > 编程语言 > Java开发

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的):

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);
}
}
欢迎优化!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: