1. 程式人生 > >[C++] LeetCode 91. 解碼方法

[C++] LeetCode 91. 解碼方法

題目

包含 A-Z 的字母的訊息通過以下規則編碼:這裡寫圖片描述
給定一個包含數字的編碼訊息,請確定解碼方法的總數。
例如,
給定訊息為 "12", 它可以解碼為 "AB"(1 2)"L"(12)
"12" 的解碼方法為 2 種。

題解

這道題用動態規劃,很好解決。但是細節很多需要考慮到位,比如存在不能解碼的情況如:
0,100,130等,然後需要注意的case10,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]; } };