Leetcode 393:UTF-8验证疑惑——测试用例为何返回False?
Leetcode 393:UTF-8验证测试用例分析
测试用例无效的原因
UTF-8编码规则明确要求:
- 单字节字符以
0开头; - 多字节字符的起始字节,前导
1的数量只能是2、3、4个,分别对应2、3、4字节的字符,且后续每个字节必须以10开头; - 不允许起始字节的前导
1数量超过4个(UTF-8最多支持4字节的Unicode字符)。
测试用例中的第一个数是250,二进制为11111010,开头有5个连续的1,这直接违反了UTF-8的编码规则,因此整个序列无效,正确答案为False。
你的代码错误点
问题出在check_byte_num函数及后续逻辑,它没有对起始字节的前导1数量做合法性校验:
- 当起始字节的前导
1数量为5(如250的二进制),该函数会返回5; - 后续代码仅检查了对应数量的续字节是否合法,却忽略了起始字节的前导
1数量必须在2-4之间的核心规则。
修复方案:在获取char_num后,新增合法性判断,如果数值不在{1,2,3,4}范围内,直接返回False。修改后的关键逻辑示例:
char_num = check_byte_num(char_bit) # 新增起始字节合法性校验 if char_num not in {1,2,3,4}: return False
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

