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;
    }
};
相关推荐
刚入门的大一新生2 小时前
C++初阶-C++入门基础
开发语言·c++
weixin_428498493 小时前
Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法
c语言·c++·visual studio
菜鸡中的奋斗鸡→挣扎鸡4 小时前
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
c语言·c++·蓝桥杯
熬夜造bug4 小时前
LeetCode Hot100 刷题笔记(1)—— 哈希、双指针、滑动窗口
笔记·leetcode·hot100
流星白龙5 小时前
【C++算法】50.分治_归并_翻转对
c++·算法
q567315235 小时前
使用libcurl编写爬虫程序指南
开发语言·c++·爬虫
矛取矛求5 小时前
C++ STL 详解 ——list 的深度解析与实践指南
c++·list
不吃元西6 小时前
leetcode 74. 搜索二维矩阵
算法·leetcode·矩阵
杰杰批6 小时前
第十四届蓝桥杯大赛软件赛国赛C/C++研究生组
c语言·c++·蓝桥杯
小开不是小可爱7 小时前
leetcode_454. 四数相加 II_java
java·数据结构·算法·leetcode