一条包含字母 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) 。
int numDecodings(char * s){
int len=strlen(s);
int **status=(int **)malloc(sizeof(int *)*2);
status[0]=(int *)calloc(len+2,sizeof(int));
status[1]=(int *)calloc(len+2,sizeof(int));
status[1][1]=1;
int *one=status[0]+2;
int *two=status[1]+2;
for(int i=0;i<len;i++)
{
if(s[i]=='0')one[i]=0;
else one[i]=one[i-1]+two[i-1];
if(i==0||s[i-1]=='0'||s[i-1]>'2'||(s[i-1]=='2'&&s[i]>'6'))two[i]=0;
else two[i]=one[i-2]+two[i-2];
if(one[i]==0&&two[i]==0)return 0;
//printf("%d %d %d\n",i,one[i],two[i]);
}
int ret=one[len-1]+two[len-1];
free(status[0]);
free(status[1]);
free(status);
return ret;
}
执行用时 : 4 ms, 在Decode Ways的C提交中击败了92.73% 的用户
内存消耗 : 6.9 MB, 在Decode Ways的C提交中击败了8.00% 的用户