首页 > 代码库 > [leetcode] Decode Ways
[leetcode] Decode Ways
题目:(DP, String)
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.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
题解:
首先自己在做这种dp题的时候老是想着将这种string 分段来看,其实很多时候就是从charat(0)一个一个位置的向后移。
参考引用http://www.cnblogs.com/springfor/p/3896162.html
动态规划来做。
设置动态数组dp[n+1]。dp[i]表示从1~i的decode ways的个数。
当给的code只有一位数时,判断是不是valid(A~Z),是的话就dp[1] = 1 不是的话就是dp[1] = 0
因为像给的例子12可以有两种可能的解析方法,所以计算dp[i]的时候要判断两种可能性,再累加。
public class Solution { public int numDecodings(String s) { if(s==null||s.length()==0||s=="0") return 0; int [] d = new int [s.length()+1]; d[0]=1; if(isValid(s.substring(0,1))) d[1]=1; else d[1]=0; for(int i=2; i<=s.length(); i++) { if(isValid(s.substring(i-1,i))) d[i]+=d[i-1]; if(isValid(s.substring(i-2,i))) d[i]+=d[i-2]; } return d[s.length()]; } public boolean isValid(String s) { if(s.charAt(0)==‘0‘) return false; int temp =Integer.parseInt(s); return temp>=1&&temp<=26; }}
[leetcode] Decode Ways
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。