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

题目:

题解:

cpp 复制代码
class Solution {
public:
    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(vector<int>& data) {
        int m = data.size();
        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;
    }
};
相关推荐
Maỿbe8 分钟前
暴打力扣之优先级队列(堆)
算法·leetcode·职场和发展
Swift社区9 分钟前
LeetCode 438 - 找到字符串中所有字母异位词
算法·leetcode·职场和发展
jyan_敬言9 分钟前
【Docker】Kubernetes部署容器化应用程序
c++·笔记·其他·docker·容器·kubernetes·学习方法
code bean11 分钟前
【C++】全局函数和全局变量
开发语言·c++·c#
北冥湖畔的燕雀15 分钟前
二叉搜索树:高效查找与删除的实现
数据结构·c++·算法
学学学无无止境15 分钟前
力扣-位1的个数
leetcode
神仙别闹16 分钟前
基于C++实现(控制台)应用二维矩阵完成矩阵运算
开发语言·c++·矩阵
别学LeetCode18 分钟前
#leetcode# 1
leetcode
sheeta199821 分钟前
LeetCode 每日一题笔记 日期:2025.11.30 题目:1590.使数组和能被 P 整除
笔记·算法·leetcode
似水এ᭄往昔32 分钟前
【C++】--二叉搜索树
开发语言·数据结构·c++