91. Decode Ways
https://leetcode.com/problems/decode-ways/
第一次是用遞歸寫的,結果超時了,,,,用動態規劃可以節省時間
寫此題一定要細心,,,稍有不慎就wa,,,
動態規劃
用 代表到第 個數字可能的組合數
如果第 個數字可以與第 個數字組合,則
如果第 個數字不能與第 個數字組合,則
其中要特別注意 的存在,因爲 只能與前面的數字 或 進行組合。
如果與數字 或 進行組合,則
否則直接返回 種可能的組合。
class Solution {
public int numDecodings(String s) {
char[] str = s.toCharArray();
if(str[0] == '0'){
return 0;
}
int[] num = new int[str.length + 1];
num[0] = 1;
num[1] = 1;
for(int i=1; i<str.length; i++){
if(str[i] == '0' && str[i-1] != '1' && str[i-1] != '2'){
return 0;
}
if((str[i-1]>'0' && str[i-1]<'2') || (str[i-1] == '2' && str[i]<'7')){
if(str[i] == '0'){
num[i+1] = num[i-1];
}else{
num[i+1] = num[i] + num[i-1];
}
}else{
num[i+1] = num[i];
}
}
return num[str.length];
}
}