Leetcode 91. Decode Ways

来源:互联网 发布:淘宝电信手机报价 编辑:程序博客网 时间:2024/05/29 13:39

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.

class Solution {public:    int numDecodings(string s) {        auto n = s.size();        if (n == 0) return 0;        if (s[0] == '0') return 0;        if (n == 1) return 1;        vector<int> p(2);        if (s[1] == '0') {            if (s[0] > '0' && s[0] <= '2') {                p[0] = 1;                p[1] = 1;            }            else                 return 0;        } else if(s[1] <= '6') {            if (s[0] <= '2' && s[0] >= '1') {                p[0] = 1;                p[1] = 2;            }            else {                p[0] = 1;                p[1] = 1;            }        } else {            if (s[0] == '1') {                p[0] = 1;                p[1] = 2;            } else {                p[0] = 1;                p[1] = 1;            }        }        size_t id = 1;        for (size_t i = 2; i!= n; ++i) {            id = 1 - id;            if (s[i] == '0') {                if (s[i - 1] > '0' && s[i - 1] <= '2') {                    p[id] = p[id];                }                else                     return 0;            } else if(s[i] <= '6') {                if (s[i - 1] <= '2' && s[i - 1] >= '1')                     p[id] = p[id] + p[1 - id];                else                    p[id] = p[1 - id];            } else {                if (s[i - 1] == '1')                     p[id] = p[id] + p[1 - id];                else                     p[id] = p[1 - id];            }        }        return p[id];    }};
class Solution {public:    int numDecodings(string s) {        auto n = s.size();        if (n == 0) return 0;        if (s[0] == '0') return 0;        if (n == 1) return 1;        vector<int> p(2);        {            stringstream ss;            ss<<string(s.begin(), s.begin() + 2);            int tmp;            ss>>tmp;             if (s[1] == '0') {                if (tmp == 10 || tmp == 20) {                    p[0] = 1;                    p[1] = 1;                }                 else                     return 0;            }            else {                if (10 < tmp && tmp <= 26) {                    p[0] = 1;                    p[1] = 2;                } else {                    p[0] = 1;                    p[1] = 1;                }            }        }        size_t id = 1;        for (size_t i = 2; i!= n; ++i) {            id = 1 - id;              stringstream ss;              ss<<string(s.begin() + i - 1, s.begin() + i + 1);              int tmp;              ss>>tmp;            if (s[i] == '0') {                if (tmp == 0) return 0;                if (tmp == 10 || tmp == 20) continue;                else                     return 0;            } else {                if (tmp > 10 && tmp <= 26)                    p[id] = p[id] + p[1 - id];                else                     p[id] = p[1 - id];            }        }        return p[id];    }};
原创粉丝点击