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

8 篇文章 0 订阅
4 篇文章 0 订阅

时间限制: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;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值