Decode Ways

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的处理,比如“10”只能一种情况,而“1001”则根本不存在解

class Solution {
public:
    int numDecodings(string s) {
         if(s.size()==0)
            return 0;
         int len = s.size();
         vector<int> dp(len+1,0);
         dp[0] = 1;
         if(s[0]!='0')
           dp[1] = 1;
        
         for(int i=2;i<=len; i++){
            if(s[i-1]-'0'>0)
                dp[i] += dp[i-1];
             string t = s.substr(i-2,2);
             if(stoi(t)<=26 && stoi(t)>0 && s[i-2]!='0')
                dp[i] +=dp[i-2];
             cout << "i = "<< i<<" "<< dp[i]<<endl;
         }
         return dp[len];
    }
};

 

posted @ 2016-11-21 21:02  WillWu  阅读(174)  评论(0编辑  收藏  举报