解码方法----招商银行信用卡中心笔试题

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:3447

本题知识点: Java工程师 C++工程师 招商银行信用卡中心 字符串 动态规划

 算法知识视频讲解

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

题目描述

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

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

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

输入描述:

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

输出描述:

解码方法的总数

示例1

输入

复制

12

输出

复制

2

说明

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

解题思路:

给出一个字符串,问有多少种解法,当碰到两位数并且小于等于26则可以产生一种新的解法,可以通过递归的方式,找到递归结束的边界值退出,边界值也就是当index==len-1,如果index<len-2则可以判断是否有2中不同的解法

代码:

#include<bits/stdc++.h>
using namespace std;
char str[10010];
int func(int index,int len)
{
    if(index<len-2)
    {
        if((str[index]-'0')*10+str[index+1]-'0'<=26)
            return func(index+1,len)+func(index+2,len);
        else
            return func(index+1,len);
    }
    else if(index==len-1)
    {
        return 1;
    }
    else
    {
        if((str[index]-'0')*10+str[index+1]-'0'<=26)return 2;
        else return 1;
    }
}
int main()
{
    while(scanf("%s",str)!=EOF)
    {
        cout<<func(0,strlen(str))<<endl;
    }
    return 0;
}

 

全部评论

相关推荐

点赞 3 评论
分享
牛客网
牛客企业服务