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;
}
相关推荐
m0_675988231 小时前
Leetcode2597:美丽子集的数目
算法·leetcode·回溯·python3
一只_程序媛1 小时前
【leetcode hot 100 234】回文链表
算法·leetcode·链表
森焱森4 小时前
出现“ping不通但可以远程连接”的情况可能由以下原因导致
linux·c语言·网络·c++
orionyl8 小时前
深度理解指针与内存
c语言·指针
94大笨象吖13 小时前
C语言共用体(union)
c语言·开发语言·算法
AIGC_ZY13 小时前
LeetCode 102. 二叉树的层序遍历,BFS(广度优先搜索)(Python)
python·leetcode·宽度优先
ᴅᴜᴅ15 小时前
C语言练习题--洛谷P1012拼数
c语言·开发语言·算法
傍晚冰川15 小时前
【江协科技STM32】TIM编码器接口测速(学习笔记)
c语言·笔记·科技·stm32·单片机·嵌入式硬件·学习
白羊不吃白菜16 小时前
PAT乙级(1076 Wifi密码)C语言超详解
c语言·开发语言
SuperCandyXu17 小时前
leetcode 0018 四数之和-medium
c++·算法·leetcode