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;
    }
};
相关推荐
Trouvaille ~几秒前
【Linux】网络编程基础(三):Socket编程预备知识
linux·运维·服务器·网络·c++·socket·网络字节序
执着25915 分钟前
力扣hot100 - 94、二叉树的中序遍历
数据结构·算法·leetcode
-dzk-17 分钟前
【代码随想录】LC 707.设计链表
数据结构·c++·算法·链表
txinyu的博客1 小时前
解析muduo源码之 Buffer.h & Buffer.cc
c++
阿猿收手吧!1 小时前
【C++】异常处理:catch块执行后程序如何继续
服务器·网络·c++
代码游侠1 小时前
C语言核心概念复习(一)
c语言·开发语言·c++·笔记·学习
Once_day1 小时前
C++之《Effective C++》读书总结(3)
c语言·c++
蜕变的土豆1 小时前
grpc-通关速成
开发语言·c++
今儿敲了吗2 小时前
10| 扫雷
c++·笔记·学习
代码游侠2 小时前
学习笔记——Linux内核与嵌入式开发3
开发语言·arm开发·c++·学习