DP-----91. Decode Ways
阿新 • • 發佈:2019-02-09
確定子問題的時候一定要注意是往前還是往後推導。
本題中,假如是往後遞推的話就把每個數字當作是最後一個數字。但是經過實踐後發現是不可取的,因為在資料中會發現還有這個叫做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];
}