class Solution { public: bool validUtf8(vector<int>& data) { const int MOD = 256; int i = 0, len = data.size(); while (i < len) { int byte = data[i] % MOD; int k = 0; while (k >= 0 && byte >> (7 - k) & 1)++k; if (k == 1 || k > 4)return false; //unicode max value 0010 FFFF //if (k == 4 && byte % 8 > 4)return false; while (--k > 0) { ++i; if (i >= len)return false; int nextByte = data[i] % MOD; if ((nextByte >> 7 & 1) == 0 || nextByte >> 6 & 1)return false; } ++i; } return true; } };