393.UTF-8编码验证
链接:393.UTF-8编码验证
难度:Medium
标签:位运算、数组
简介:给定一个表示数据的整数数组 data ,返回它是否为有效的 UTF-8 编码。
题解 1 - cpp
- 编辑时间:2022-03-13
- 执行用时:4ms
- 内存消耗:13.5MB
- 编程语言:cpp
- 解法介绍:遍历。
#define MAXBIT 7
·class Solution {
   public:
    bool validUtf8(vector<int>& data) {
        int n = data.size(), remain = 0;
        for (auto& byte : data) {
            if (remain) {
                // 有残留但不是10
                if (!check10(byte)) return false;
                remain--;
                continue;
            }
            if ((byte & 1 << MAXBIT) == 0) continue;
            // 无残留但是10
            if (check10(byte)) return false;
            while (remain < MAXBIT && (1 << (MAXBIT - remain - 1) & byte) > 0)
                remain++;
            // 剩余残留>3
            if (remain >= 4) return false;
        }
        return remain == 0;
    }
    bool check10(int byte) {
        return (byte & 1 << MAXBIT) > 0 && (byte & 1 << (MAXBIT - 1)) == 0;
    }
};