[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 an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
思考:未考虑0的情况wrong了好多次。
class Solution { public: int numDecodings(string s) { //未考虑0的情况 //"0","00","01","110" int len=s.size(); if(len==0) return 0; if(s[0]=='0') return 0; vector<int> dp(len+1,0); if(len==1) return 1; dp[0]=1;int temp; if(s[1]=='0') { if(s[0]=='1'||s[0]=='2') dp[1]=1; else return 0; } else { temp=10*(s[0]-'0')+(s[1]-'0'); if(temp>10&&temp<=26) dp[1]=2; else dp[1]=1; } for(int i=2;i<len;i++) { if(s[i]=='0') { if(s[i-1]=='0') return 0; else if(s[i-1]=='1'||s[i-1]=='2') dp[i]=dp[i-2]; else return 0; } else { temp=10*(s[i-1]-'0')+(s[i]-'0'); if(temp>10&&temp<=26) dp[i]=dp[i-1]+dp[i-2]; else dp[i]=dp[i-1]; } } return dp[len-1]; } };