Decode Ways

来源:互联网 发布:arm单片机型号 编辑:程序博客网 时间:2024/05/22 15:56

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.

算是dp。 应为是组合数,所以应该想清楚的是,如果当前i只有一种解释,那么总数为i-1的数,如果i-1和i合起来还有一种解释,那么就要加上i-2的和。

比较特殊的是,isValid要检查在不在26个字母中间,比较注意的是第一个不要为0. 算结果的时候前两个需要特殊处理一下从第三个开始loop


class Solution {public:    int numDecodings(string s) {    int n=s.size();    if (n==0)    return 0;    vector<int> res(n,0);    if (s[0]!='0')    res[0]++;    if (n==1)    return res[0];    if(isValid(s.substr(0,2)))    res[1]++;    if (s[0]!='0' && s[1]!='0')    res[1]++;    for (int i=2; i<n; i++){    if (s[i]!='0')    res[i]+=res[i-1];    if (isValid(s.substr(i-1,2)))    res[i]+=res[i-2];    }    return res[n-1];    }private:    bool isValid(string s){    int size=s.size();    if (size==0)    return false;    if (size==1 && s[0]=='0')    return false;    if (size==2 && ((s[0]=='2' && s[1]>'6')|| s[0]>'2'||s[0]=='0'))    return false;    return true;    }};


0 0
原创粉丝点击