字符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; }