【LeetCode】Decode Ways
阿新 • • 發佈:2018-12-17
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; } };