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;
    }
};
相关推荐
leoufung1 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了1 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
谭欣辰1 小时前
C++ 排列组合完整指南
开发语言·c++·算法
橙子也要努力变强2 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++
盐焗鹌鹑蛋2 小时前
【C++】stack和queue类
c++
郝学胜-神的一滴3 小时前
罗德里格斯旋转公式(Rodrigues‘ Rotation Formula)完整推导
c++·unity·godot·图形渲染·three.js·unreal
lzh200409194 小时前
深入理解进程:从PCB内核结构到写时拷贝的底层实战
linux·c++
aseity4 小时前
跨平台项目中QString 与 非Qt 跨平台动态库在字符集上的一个实用的互操作约定.
c++·经验分享
CN-Dust4 小时前
【C++】while语句例题专题
数据结构·c++·算法
用户805533698034 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt