我们得到了一个代表数字序列的字符串。每个数字从1到26解码为英文字母。1是“ A”,2是“ B”,依此类推直到26为“ Z”。目的是找到给定数字序列之外所有可能解码的计数。如果序列是“ 123”,则可能的解码是“ ABC”(1-2-3),“ LC”(12-3),“ AW”(1-23)。数是3。
让我们通过示例来理解。
输入− str [] =“ 1532”
输出-给定数字序列的可能解码计数为-2
说明-可能的解码为AECB-(1-5-3-2)和OCB(15-3-2)。
输入− str [] =“ 216”
输出-给定数字序列的可能解码计数为-3
解释-可能的解码为“ BAF”(2-1-6),“ UF”(21-6),“ BP”(2-16)
我们将使用递归方法进行此操作。将字符串的一部分传递给此递归方法。
如果最后一个数字不为“ 0”,则检查是否为真,请检查字符串的其余部分,介于0和length-1之间。检查最后两位数字的字符串部分是否使数字介于1和26之间。如果为true,则更新count并检查字符串的其余部分(介于0和length-2之间)。
我们将输入作为字符串str []。
函数decode_digit_seq(char * str,int length)获取字符串及其长度,并返回可能的str解码计数。
如果length为0。返回1。
如果length为1,则返回1。
如果最后一个字符不为零,则计数为decode_digit_seq(str,int length-1)
如果倒数第二个字符是1,则后两位数字将在10到19之间(从J到S),将count更新为count = count + encode_digit_seq(str,length-2)
如果倒数第二个字符是2并且最后一个字符<7,则后两位数将在20到26之间(从T到Z),更新计数为count = count + encode_digit_seq(str,length-2)
现在所有案例都被处理了。
最后,所有递归返回结果。
#include <iostream> #include using namespace std; int decode_digit_seq(char *str, int length){ int count = 0; if(length == 0){ return 1; } if(length == 1){ return 1; } if(str[0] == '0'){ return 0; } if(str[length-1] > '0'){ count = decode_digit_seq(str, length-1); } if(str[length-2] == '1'){ count = count + decode_digit_seq(str, length-2); } if(str[length-2] == '2' && str[length-1] < '7'){ count = count + decode_digit_seq(str, length-2); } return count; } int main(){ char str[] = "7651"; int length = strlen(str); cout<<"Count of Possible Decodings of a given Digit Sequence are: "<< decode_digit_seq(str, length); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Count of Possible Decoding of a given Digit Sequence are: 1