NO.91 解码方法

本文详细解析了一种针对字母A-Z编码为数字1-26的消息解码算法,通过示例展示了不同解码方法的计算过程,介绍了如何使用C语言实现这一算法,包括动态规划的应用。

一条包含字母 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% 的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值