*[Lintcode] Decode Ways
来源:互联网 发布:dijkstra算法求解过程 编辑:程序博客网 时间:2024/06/05 10:06
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1'B' -> 2...'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
Example
Given encoded message 12
, it could be decoded as AB
(1 2) or L
(12).
The number of ways decoding 12
is 2.
public class Solution { /** * @param s a string, encoded message * @return an integer, the number of ways decoding */ public int numDecodings(String s) { if(s.length() == 0) return 0; else return helper(s); } private int helper(String s) { //add 1 at the end if(s.length() == 0) return 1; if(s.length() == 1 && Integer.parseInt(s.substring(0, 1)) != 0) return 1; int res = 0; if(Integer.parseInt(s.substring(0, 1)) == 0) return 0; else { int tmp = Integer.parseInt(s.substring(0, 2)); int count = 0; if(tmp <= 26) { count = helper(s.substring(2)); } return helper(s.substring(1)) + count; } }}
结果超时。只能使用一维数组。虽然原理相同,但是一维数组用加法代替了递归的步骤,所以更加快速
public class Solution { /** * @param s a string, encoded message * @return an integer, the number of ways decoding */ public int numDecodings(String s) { if(s.length() == 0 || s == null) return 0; if(s.charAt(0) == '0') return 0; int[] res = new int[s.length() + 1]; //start from 1, keep two elements before cursor because if we get 31 in i position, we need i-2 value res[0] = 1; res[1] = 1; for(int i = 2; i <= s.length(); i++) { if(s.charAt(i - 1) > '0' && s.charAt(i - 1) <= '9') res[i] = res[i - 1]; int tmp = Integer.parseInt(s.substring(i - 2, i)); if(s.charAt(i - 2) != '0') { if(tmp > 0 && tmp <= 26){ res[i] += res[i - 2]; } } } return res[s.length()]; } }
0 0
- *[Lintcode] Decode Ways
- Decode Ways --lintcode
- lintcode decode-ways 解码方法
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode Ways
- Decode ways
- Decode Ways
- 第一行代码系列第二章——向下一个活动传递数据
- Mysql Innodb锁分析
- 游戏菜单级联
- 线性代数复习 第六章 二次型
- 1117. Eddington Number(25)-PAT甲级真题
- *[Lintcode] Decode Ways
- VPS主机IP被墙怎么办 导致IP被墙的原因
- 244.1
- 基于tmpfs使用mongoDB
- maven的pom文件报错: must be "pom" but is "jar"
- 【web】basic HTML(1)
- JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
- Thread中sleep()与yield()的区别
- 把颜色值转成UIImageyu