解码方法
一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:
输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
1 class Solution { 2 public int numDecodings(String s) { 3 if(s.charAt(0)=='0') 4 return 0; 5 if(s.length()==1){ 6 return 1; 7 } 8 int[] dp=new int[s.length()+1]; 9 dp[0]=1; 10 dp[1]=1; 11 for(int i=2;i<=s.length();i++){ 12 if(s.substring(i-2,i).length()>0 && s.substring(i-2,i).charAt(0)!='0'&& s.substring(i-2,i).charAt(1)!='0' && Integer.valueOf(s.substring(i-2,i))<=26){ 13 dp[i]=(dp[i-1]+dp[i-2]); 14 } 15 else{ 16 if(s.charAt(i-1)=='0' && s.charAt(i-2)!='0'){ 17 if(Integer.valueOf(s.substring(i-2,i))>26) 18 return 0; 19 dp[i]=dp[i-2]; 20 } 21 else if(s.charAt(i-1)!='0') 22 dp[i]=dp[i-1]; 23 else 24 return 0; 25 } 26 } 27 return dp[s.length()]; 28 } 29 }