1. 程式人生 > >【LeetCode】Decode Ways

【LeetCode】Decode Ways

A message containing letters from A-Z is being encoded to numbers using the following mapping:

'A' -> 1
'B' -> 2
...
'Z' -> 26

Given a non-empty string containing only digits, determine the total number of ways to decode it.

Example 1:

Input: "12"
Output: 2
Explanation: It could be decoded as "AB" (1 2) or "L" (12).

Example 2:

Input: "226"
Output: 3
Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

題解:dp問題,可以不用設定dp陣列直接用三個變數完成遞迴即可,關鍵在於判斷各種情況和0的處理,比如兩位時第一位必須不能為0還有一個時不能為0

程式碼:

class Solution {
public:
    int numDecodings(string s) {
        int dp1=1,dp2=1,dp=1;
        if(s[0]=='0') return 0;
        for(int i=2;i<=s.size();i++){
            string str=s.substr(i-2,2);
            int num=stoi(str);
            if(num>=10&&num<=26&&s[i-1]!='0'){
                dp=dp2+dp1;
            }else if(s[i-1]=='0'&&s[i-2]=='0'){
                return 0;
            }else if(num>=10&&num<=26&&s[i-1]=='0'){
                dp=dp2;
            }else if(s[i-1]=='0') return 0;
            else dp=dp1;
            dp2=dp1;dp1=dp;
        }
        return dp;
    }
};