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;
}
相关推荐
Kuo-Teng8 小时前
Leetcode438. 找到字符串中所有字母异位词
java·算法·leetcode
散峰而望9 小时前
C++入门(一)(算法竞赛)
c语言·开发语言·c++·编辑器·github
墨染点香9 小时前
LeetCode 刷题【138. 随机链表的复制】
算法·leetcode·链表
l1t10 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
GOATLong10 小时前
git使用
大数据·c语言·c++·git·elasticsearch
学习路上_write13 小时前
STM32回调函数使用/定时器/GPIO/串口/
c语言·单片机·嵌入式硬件
czy878747514 小时前
C语言实现状态模式
c语言·状态模式
czy878747514 小时前
C语言实现迭代器模式
c语言·迭代器模式
GilgameshJSS14 小时前
STM32H743-ARM例程36-DNS
c语言·arm开发·stm32·单片机·嵌入式硬件
Shinom1ya_15 小时前
算法 day 41
数据结构·算法·leetcode