指定有一段经过编码的二进制数据,数据由0个或多个"编码单元"组成。
编码单元“的编码方式存在如下两种:
1.简单编码单元如下所示,其中:
题目要求对一段经过编码的二进制数据进行校验,数据由0个或多个编码单元组成。编码单元分为两种类型:简单编码单元和复杂编码单元。简单编码单元的TAG为0xF0
,后面跟随4字节的值;复杂编码单元的TAG为0xF1
,后面包含一个重复次数(1字节)、一个长度(4字节),以及指定字节数的值部分,这部分可以由0个或多个编码单元组成。输入为一行16进制表示的编码数据,输出解码后的总字节数或-1
表示不合法。如果编码数据符合规则,计算解码后的总长度;否则,返回-1
表示数据不合法。
F0是普通编码,我们直接识别即可。
F1是复杂编码,它指示着后续的len长度的字节数据会重复rep次。而且我们发现这len长度的字节数据内同样可以蕴含F1编码。所以我们自然想到需要用递归来拆解这个编码。