1. 程式人生 > >DP-----91. Decode Ways

DP-----91. Decode Ways

原題目

確定子問題的時候一定要注意是往前還是往後推導。
本題中,假如是往後遞推的話就把每個數字當作是最後一個數字。但是經過實踐後發現是不可取的,因為在資料中會發現還有這個叫做0的東西。這個0的存在使得往後遞推不是很容易,因為多了好幾個判斷。所以選擇從後往前面遞推。那麼每個數字看作是每一組數的第一個數字就行了。




  public int numDecodings(String s) {
        int result = 0;
        if (s == null || s.length() == 0) {
            return result;
        }

        int
len = s.length(); int[] dp = new int[len + 1]; //初始狀態,任何情況下除了零之外的情況。 dp[len] = 1; //最後一個數字是零的情況。倘若不是零的話就是1,是零的話就是0 if (s.charAt(len - 1) != '0') { dp[len - 1] = 1; } else { dp[len - 1] = 0; } for (int i = len - 2; i >= 0
; i--) { //解決是零的情況。 if (s.charAt(i) == '0') { continue; } else { String str = s.substring(i, i + 2); int a = Integer.parseInt(str); if (a <=26) { dp[i] = dp[i + 1] + dp[i + 2]; } else
{ dp[i] = dp[i + 1]; } } } return dp[0]; }