leetcode 91. 解码方法

题目描述:

一条包含字母 A-Z 的消息通过以下方式进行了编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26

给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。

示例 2:

输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

思路:对于第i个字符,只要s[i]!='0'(1-9有编码),解码方法并不会增加,和s[i-1]的解码方法个数一样,
然后看s[i-1]是否是'1'、'2'(1或者2可以和下一位组成新编码),因s[i+1]和s[i]组成了新的编码,
所以此时s[i]的编码总数需要再加上s[i-2]的编码个数。
注意:除了第一位不能为'0',之后的都可以,'10'也属于编码。
class Solution {
public:
    int numDecodings(string s) {
        if(s.size() == 0 || s[0] == '0')
        return 0;
        vector<int> a(s.size());
        int i;
        a[0]=1;
        for(i =1;i<s.size();i++)
        {
            if(s[i] != '0')
            {
                a[i] = a[i-1];
            }
            if(s[i-1]=='1' || s[i-1]=='2' && s[i]>='0' && s[i]<='6')
            {
                if(i==1)
                {
                    a[i] = a[i]+a[i-1];
                }else
                {
                    a[i] = a[i]+a[i-2]; 
                }
            }
            
        }
        return a[i-1];
    }
};

题目链接:https://leetcode-cn.com/problems/decode-ways/

猜你喜欢

转载自www.cnblogs.com/hdyss/p/10800882.html