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