计算数字数组的所有可能解释

时间:2018-10-18 11:01:24

标签: c++ algorithm

让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;
}

输出始终为一。

0 个答案:

没有答案