1 class Solution: 2 def validUtf8(self, data): 3 # 标记这个字节是某个编码的第几个字节 4 n_bytes = 0 5 6 # 遍历数组 7 for num in data: 8 9 # 获取二进制编码,保留最低8位 10 bin_rep = format(num, '#010b')[-8:] 11 # 这是一个新的UTF-8编码的第一个字节 12 if n_bytes == 0: 13 14 # 计算前导1的个数 15 for bit in bin_rep: 16 if bit == '0': break 17 n_bytes += 1 18 19 # 没有前导1,则表示是一个单子节的UTF-8编码 20 if n_bytes == 0:#单子节只需要第一位是0即可 21 continue 22 23 # 如果前导1,只有1位,或者超过4位,都是非法格式 24 if n_bytes == 1 or n_bytes > 4: 25 return False 26 else: 27 # 这是某个UTF-8编码的非第一子节的表示 28 # 必须是 `10xxxxxx` 的格式,即第0位必须是1,第1位必须是0 29 if not (bin_rep[0] == '1' and bin_rep[1] == '0'): 30 return False 31 32 # 当前UTF-8编码内容,已经完成了1个字节的判断,长度-1 33 n_bytes -= 1 34 35 # 数组中所有内容都验证是合法的,没有未验证的字节了。 36 return n_bytes == 0
算法思路:字符串判断。
参考:https://leetcode-cn.com/problems/utf-8-validation/solution/utf-8-bian-ma-yan-zheng-by-leetcode/
已将参考链接里的英文注释,按照我自己的理解,翻译成中文。