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;
    }
};
相关推荐
坚果派·白晓明5 分钟前
鸿蒙PC】libuv适配:AtomCode Skills一站式指南
c语言·c++·华为·ai编程·harmonyos·atomcode
c++之路8 分钟前
CMake 系列教程(五):进阶技巧
c语言·开发语言·c++
影寂ldy18 分钟前
C# 三大内置委托(Action / Func / Predicate)+ Lambda
c++·算法·c#
言存1 小时前
力扣热题283 移动零
数据结构·算法·leetcode
字节高级特工1 小时前
智能指针原理与使用场景全解析
开发语言·c++·算法
插件开发2 小时前
CUDA11-VS2015安装-工具链测试-Helloworld程序
c++·gpu·cuda
攻城狮Soar2 小时前
STL源码解析之deque
开发语言·c++
洛水水3 小时前
【力扣100题】80.寻找旋转排序数组中的最小值
数据结构·算法·leetcode
Rabitebla3 小时前
C++ 多态详解:从概念到虚表底层原理(代码轰炸)
开发语言·c++
charlie1145141913 小时前
通用GUI编程技术——图形渲染实战(五十)——命中测试与鼠标事件路由:精确交互
c++·windows·架构·交互·图形渲染