1class Solution {2public boolean validUtf8(int[] data) {3return help(data, 0);4}56public boolean help(int[] data, int index) {7int n = data.length - index;8if (n == 0) {9return true;10}11int c0 = count(data[index]);12if (c0 < 0 || c0 > n) {13return false;14}15for (int i = index + 1; i < index + c0; i++) {16if ((data[i] & 0b10000000) != 0b10000000) {17return false;18}19}20return help(data, index + c0);21}2223private int count(int a) {24if ((a >> 3) == 0b11110) {25return 4;26} else if ((a >> 4) == 0b1110) {27return 3;28} else if ((a >> 5) == 0b110) {29return 2;30} else if ((a >> 7) == 0) {31return 1;32}33return -1;34}35}