leetcode:解碼方法(java動態規劃)
阿新 • • 發佈:2019-01-12
package LeetCode; /* 一條包含字母 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) 。 */ public class NumDecodings { public int numDecodings(String s) { if(s.equals("0")){ return 0; } int[] dp=new int[s.length()+1]; char[] ss=s.toCharArray(); if(ss[0]>48){ dp[0]=1; dp[1]=1; }else { dp[0]=0; dp[1]=0; } for (int i = 2; i <dp.length ; i++) { int two=ss[i-1]-48+(ss[i-2]-48)*10; if(two<27&&two>0&&(ss[i-2]-48)>0){ if (ss[i-1]!=48){ dp[i]=dp[i-2]+dp[i-1]; }else { dp[i]=dp[i-2]; } }else { if (two==0||ss[i-1]==48){ dp[i]=0; }else { dp[i]=dp[i-1]; } } } return dp[s.length()]; } public static void main(String[] args) { NumDecodings a=new NumDecodings(); System.out.println(a.numDecodings("230")); } }