1->A,2->B...26->Z,输入一个整数,输出数字N代表有多少种表示
输入:111 输出:3
说明:AAA AK KA三种可能性
采用动态规划,dp[i]表示截止到第i个字符有多少种可能性,如果该字符和前一个字符组成的数字>26时,dp[i]=dp[i-1],否则,dp[i]=dp[i-1]+dp[i-2],代码如下:
#include<iostream>]
#include<string>
using namespace std;
int main()
{
string str;
cin >> str;//输入按字符串处理
int length = str.length();
vector<int> dp(length+1);
dp[0] = 1;//字符串长度为0时返回1
for (int i = 1; i <= length; i++)
{
if (i < 2)//字符串长度为1时只有1种
{
dp[i] = dp[i - 1];
}
else
{
if ((str[i - 2] - '0') * 10 + str[i-1] - '0' <= 26)
{
dp[i] = dp[i - 1] + dp[i - 2];
}
else
{
dp[i] = dp[i - 1];
}
}
}
cout << dp[length] << endl;
return 0;
}