393. UTF-8 编码验证
模拟,首先一个字符的情况判断第一位是不是0即可,然后判断前5位几个1,如果1个或者5个1都不合法,同时判断后面几个数是否符合10开头,当遍历完所有数字之后都合法返回true
class Solution {
public:
int get(int x, int k) {
return x >> k & 1;
}
bool validUtf8(vector<int>& data) {
for (int i = 0; i < data.size(); i ++ ) {
if (!get(data[i], 7)) continue;
int k = 0;
while (k <= 4 && get(data[i], 7 - k)) k ++ ;
if (k == 1 || k > 4) return false;
for (int j = 1; j < k; j ++ ) {
int t = i + j;
if (t >= data.size()) return false;
if (get(data[t], 7) != 1 || get(data[t], 6) != 0) return false;
}
i += k - 1;
}
return true;
}
};