Wei Li +

【DP】【String】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.

###思路 DP入门题,比较像stairs

###代码

int numDecodings(string s) {
    int n = s.length();
    vector<int> ways(n, -1);
    return waysEnding(s,  ways, n-1);
}
int waysEnding(string &s, vector<int>& ways, int n){
    if(n < 0) return 0;//处理“”
    if(ways[n] != -1) return ways[n]; //返回备忘录的值
    
    int nway = 0;
    char c = s[n];
    if(c <= '9' && c >= '1'){
        if(n > 0)
            nway += waysEnding(s,ways,n-1);
        else
            nway += 1;
    }
    if(n < 1) return nway;//防止下面n-2出错
    
    int i = stoi(s.substr(n-1, 2));
    if(i <= 26 && i >= 10){
        if(n > 1)
            nway += waysEnding(s,ways,n-2);
        else
            nway += 1;
    }
    ways[n]= nway;//别忘了给备忘录设值,不然会TLE
    return nway;
}

转载请注明出处:【DP】【String】Decode Ways

友荐云推荐

AmazingCounters.com

Tech

Life