字符A-Z可以编码为1-26。"A"->"1","B"->"2",.. "Z"->"26"
现在输入一个数字字符串,计算有多少种方式可以将该字符串解码成字符A-Z组成的序列。
输入输出样例:
输入:19
输出:2 (AI或S)
输入:268
输出:2
输入:219
输出:3
#include<iostream> #include<string.h> #include<math.h> using namespace std; int n,m,v; long ans; int mod=1e9+7; int dp[105],cost[105][3]; bool vis[105]; int main(){ string s; cin>>s; n=s.length(); dp[0]=1; //初始条件 空串就是解析成空串一种情况 for(int i=1;i<=n;i++){ dp[i]=0; int num=s[i-1]-'0'; // s(i-1)表示第 i 个字符 if(num>=1&&num<=9){ //dp(i-1)表示前 i-1位可以解析的数量 dp[i]+=dp[i-1]; } if(i>=2){ int num2=(s[i-2]-'0')*10+num; if(num2>=10&&num2<=26){ //判断此时字符和前一位字符组成的数是否可以由'A'到 'Z'组成 dp[i]+=dp[i-2]; //dp(i-2)表示前 i-2位可以解析的数量 } } } cout<<dp[n]<<endl; return 0; }