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;
}
相关推荐
·云扬·1 天前
【Leetcode hot 100】101.对称二叉树
算法·leetcode·职场和发展
西阳未落1 天前
C语言中的内存函数(memcpy, memmove, memcmp, memset)
c语言·开发语言
睡不醒的kun1 天前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
范纹杉想快点毕业1 天前
ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)嵌入式编程 C语言 c++ 软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·51单片机
_OP_CHEN1 天前
数据结构(C语言篇):(十二)实现顺序结构二叉树——堆
c语言·数据结构·算法·二叉树·学习笔记··顺序结构二叉树
杨福瑞1 天前
C语⾔内存函数
c语言·开发语言
共享家95271 天前
经典动态规划题解
算法·leetcode·动态规划
起个昵称吧1 天前
立即数、栈、汇编与C函数的调用
c语言·开发语言·汇编
1白天的黑夜11 天前
栈-844.比较含退格的字符串-力扣(LeetCode)
c++·leetcode·
cellurw1 天前
俄罗斯方块终端游戏实现 —— C语言系统编程与终端控制
c语言·算法