让1代表“ A”,让2代表“ B”,依此类推。给定一个数字序列,计算给定数字序列的可能解码次数。一个空数字序列被认为具有一个解码。可以假定输入中包含从0到9的有效数字,并且没有前导0,没有多余的尾随0,也没有两个或多个连续0。
#include <iostream>
using namespace std;
int helper(string s,int k,int* memo)
{ int result = 0;
if( k==0 )
return 1;
int t = s.length() - k;
if( s[t] == '0')
return 0;
if(memo[k]!=-1)
return memo[k];
result = helper(s,k-1,memo);
if(k>=2 &&((s[t]==1 ||s[t]==2)&&s[t+1]<7 ))
result+=helper(s,k-2,memo);
memo[k]=result;
return result;
}
int num_ways(string s,int k)
{
int memo[40];
for(int i = 0;i<40;i++)
{
memo[i] = -1;
}
cout<<helper(s,k,memo)<<"\n";
}
int main() {
int num_ways(string s,int k);
int helper(string s,int k,int* memo);
//code
int t = 0,len=0;
string s;
cin>>t;
while(t--)
{
cin>>len;
for(int i = 0;i<len;i++)
cin>>s[i];
num_ways(s,len);
}
return 0;
}
输出始终为一。