计算C ++中给定数字序列的可能解码
我们得到了一个代表数字序列的字符串。每个数字从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,intlength)获取字符串及其长度,并返回可能的str解码计数。
如果length为0。返回1。
如果length为1,则返回1。
如果最后一个字符不为零,则计数为decode_digit_seq(str,intlength-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