[C++] LeetCode 91. 解碼方法
阿新 • • 發佈:2019-02-06
題目
包含 A-Z 的字母的訊息通過以下規則編碼:
給定一個包含數字的編碼訊息,請確定解碼方法的總數。
例如,
給定訊息為 "12"
, 它可以解碼為 "AB"(1 2)
或 "L"(12)
。
"12"
的解碼方法為 2 種。
題解
這道題用動態規劃,很好解決。但是細節很多需要考慮到位,比如存在不能解碼的情況如:
0,100,130
等,然後需要注意的case
:10,27,102
等
程式碼
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
if(n==0) return 0;
vector<int> nums(n,0);
for(int i=0;i<n;i++){
if(s[i]=='0'){
if(i==0) return 0;
else if(s[i-1]=='0'||s[i-1]>'2') return 0;
else nums[i]=i-2>=0?nums[i-2]:1;
}
else{
if(i==0) nums[i]=1 ;
else if(s[i-1]=='1'||(s[i-1]=='2'&&s[i]<='6')) nums[i]=nums[i-1]+(i-2>=0?nums[i-2]:1);
else nums[i]=nums[i-1];
}
}
return nums[n-1];
}
};