C语言 | Leetcode C语言题解之第393题UFT-8编码验证

题目:

题解:

cpp 复制代码
static const int MASK1 = 1 << 7;
static const int MASK2 = (1 << 7) + (1 << 6);

bool isValid(int num) {
    return (num & MASK2) == MASK1;
}

int getBytes(int num) {
    if ((num & MASK1) == 0) {
        return 1;
    }
    int n = 0;
    int mask = MASK1;
    while ((num & mask) != 0) {
        n++;
        if (n > 4) {
            return -1;
        }
        mask >>= 1;
    }
    return n >= 2 ? n : -1;
}

bool validUtf8(int* data, int dataSize){
    int m = dataSize;
    int index = 0;
    while (index < m) {
        int num = data[index];
        int n = getBytes(num);
        if (n < 0 || index + n > m) {
            return false;
        }
        for (int i = 1; i < n; i++) {
            if (!isValid(data[index + i])) {
                return false;
            }
        }
        index += n;
    }
    return true;
}
相关推荐
Tisfy9 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
A boy CDEF girl10 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
wuminyu11 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
图灵-M14 小时前
【数据结构】静态 & 动态顺序表
c语言·数据结构·笔记
揽星河..14 小时前
【C语言】数组
c语言·开发语言·算法
水饺编程15 小时前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
揽星河..15 小时前
【C语言】函数
c语言·算法
驭渊的小故事17 小时前
LeetCode 算法题解:滑动窗口与数组合并的实战应用
算法·leetcode·职场和发展
文丑颜不良啊17 小时前
LeetCode1501~1520题目解析
java·leetcode
Navigator_Z18 小时前
LeetCode //C - 1311. Get Watched Videos by Your Friends
c语言·算法·leetcode