/**
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) 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-ways
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
#include <stdio.h>
#include <string.h>
int numDecodings(char * s)
{
if(s[0]=='0')
return 0;
int len=strlen(s);
int dpi_2=1;
int dpi_1=1;
int dpi=1;
for(int i=1; i<len; ++i)
{
if(s[i]=='0')
{
if(s[i-1]=='1'||s[i-1]=='2') //10 20
dpi=dpi_2;
else //00 30 40 50 60 70 80 90
return 0;
}
else
{
if(s[i-1]=='1'||(s[i-1]=='2'&&s[i]<'7')) //11-19 21-26
dpi=dpi_1+dpi_2;
else
dpi=dpi_1;
}
dpi_2=dpi_1;
dpi_1=dpi;
}
return dpi;
}
int main()
{
char s[]="227";
printf("%d",numDecodings(s));
}