原题链接:力扣
描述: 给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码。
UTF-8 中的一个字符可能的长度为 1 到 4 字节,遵循以下的规则:
对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。
对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。
这是 UTF-8 编码的工作方式:
Char. number range|UTF-8 octet sequence
(hexadecimal)|(binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
注意:输入是整数数组。只有每个整数的 最低 8 个有效位 用来存储数据。这意味着每个整数只表示 1 字节的数据。
示例 1:
输入:data = https://www.it610.com/article/[197,130,1]
输出:true
解释:数据表示字节序列:11000101 10000010 00000001。
这是有效的 utf-8 编码,为一个 2 字节字符,跟着一个 1 字节字符。
示例 2:
输入:data = https://www.it610.com/article/[235,140,4]
输出:false
解释:数据表示 8 位的序列: 11101011 10001100 00000100.
前 3 位都是 1 ,第 4 位为 0 表示它是一个 3 字节字符。
下一个字节是开头为 10 的延续字节,这是正确的。
但第二个延续字节不以 10 开头,所以是不符合规则的。
提示:
1 <= data.length <= 2 * 104
0 <= data[i] <= 255
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/utf-8-validation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
* 解题思路: * 这题主要分两种情况吧, * 第一种情况是num>0时,这时候代表前面是有积累的。则首位一定要为1,为1则num--。否则返回false。 * 第二种情况是num==0时,这种代表是UTF-8的首个字符,则要计算该字符多长,即num的数量。num=1或者num>4都是不合法的。而且要减去自身的那一个,所以num--。
代码:
public class Solution393 {public boolean validUtf8(int[] data) {
int i = 0;
int num = 0;
while (i < data.length) {
int value = https://www.it610.com/article/data[i++];
boolean b = (value & 0b1000_0000) == 0b1000_0000;
if (num> 0) {
if (b) {
num--;
continue;
}
return false;
}
if (num == 0) {
int flag = 0b1000_0000;
while ((value & flag) == flag) {
num++;
flag = flag >> 1;
if (num > 4) {
return false;
}
}
if (num == 1) {
return false;
}
num = num > 0 ? num - 1 : 0;
}
}
return num == 0;
}
}
【LeetCode编程题解法汇总|力扣解法汇总393- UTF-8】
推荐阅读
- 九章算法班 2021 版无密
- 学历|别让学历成为你唯一的优势
- 图神经网络|什么是机器学习、深度学习、图神经网络()
- 技术知识|为什么说BP神经网络就是人工神经网络的一种()
- LeetCode编程题解法汇总|力扣解法汇总653-两数之和 IV - 输入 BST
- 计算机视觉算法工程师|算法工程师15——数据结构与算法加强版
- 算法|【算法】时间复杂度真的不“复杂”
- Python系列|数据结构与算法笔记(五)——队列(FIFO队列、双端队列)
- python|Python数据结构与算法(3.3)——队列