列表

详情


CMB24. 解码方法

描述

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

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

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

输入描述

12可以解码成“AB”,“L”这两种

输出描述

解码方法的总数

示例1

输入:

12

输出:

2

说明:

12可以解码成“AB”,“A,B"这两种

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 256KB, 提交时间: 2019-09-21

#include<stdio.h>
#include<string.h>

int cnum(char a,char b)
{
    int num;
    num = (a-'0')*10 + b-'0';
    return num;
}

int func(char* a,int len,int i)
{
    int num=1;
    int flag=0;
    if((len-i)>=2)
    {
        int nu=cnum(a[i],a[i+1]);
        if(nu<=26) flag=1;
    }
    else if(i==len-1) return 1;
    else if(i==len) return 1;
    if(flag==0) return num=num*1*func(a,len,i+1);
    else if(flag==1) return num=num*1*func(a,len,i+2)+num*1*func(a,len,i+1);
}

int main()
{
    char a[10000];
    scanf("%s",&a);
    int num=1;
    if(strlen(a)==1)
    {
        printf("1\n");
        return 0;
    }
    int len = strlen(a);
    num=func(a,len,0);
    printf("%d\n",num);
}

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-23

#include <stdio.h>
#include <string.h>

int main()
{
    char s[1000];
    while(scanf("%s",s)!=EOF)
    {
        if(s[0]=='0')
        {
            printf("%d\n",0);
            continue;
        }
        int len=strlen(s);
        int arr[len];
        arr[0]=1;
        if(((s[0]-48)*10+s[1]-48)>26)
            arr[1]=1;
        else
        {
            if(s[1]=='0')
                arr[1]=1;
            else
                arr[1]=2;
        }
        int i;
        for(i=2;i<len;i++)
        {
            if(s[i]=='0' && !('0'<s[i-1] && s[i]<'3'))
                break;
            if(s[i]=='0')
            {
                arr[i]=arr[i-2];
                continue;
            }
            if(s[i-1]=='0')
            {
                arr[i]=arr[i-1];
                continue;
            }
            if(((s[i-1]-48)*10+s[i]-48)>26)
                arr[i]=arr[i-1];
            else
                arr[i]=arr[i-1]+arr[i-2];
        }
        if(i==len || len==1)
            printf("%d\n",arr[len-1]);
        else
            printf("%d\n",0);
    }
    return 0;
}

上一题