1 class Solution { 2 public boolean validUtf8(int[] data) { 3 if(data.length == 0) return false; 4 int start = 0; 5 while(start < data.length){ 6 int num = helper(data[start]); 7 if(num == 0){ 8 start++; 9 continue; 10 }else if(num == 1){ 11 return false; 12 }else if(num == 2){ 13 if(start + 1 >= data.length || helper(data[start+1]) != 1){ 14 return false; 15 } 16 start = start + 2; 17 }else if(num == 3){ 18 if(start + 2 >= data.length || helper(data[start+1]) != 1 || helper(data[start+2]) != 1){ 19 return false; 20 } 21 start = start + 3; 22 }else if(num == 4){ 23 if(start + 3 >= data.length || helper(data[start+1]) != 1 || helper(data[start+2]) != 1 || helper(data[start+3]) != 1){ 24 return false; 25 } 26 start = start + 4; 27 }else{ 28 return false; 29 } 30 31 } 32 return true; 33 34 } 35 36 public int helper(int num){ 37 int count = 0; 38 for(int i = 7; i >= 0; i--){ 39 if(((num >> i) & 1) == 1){ 40 count++; 41 }else{ 42 break; 43 } 44 } 45 return count; 46 } 47 }