LC393
题目
今天的题目真恶心,好多特殊情况,一下我总结了一下我遇到的坑
1.字符长度1~4字节,这就意味着单个字节开头最多4个1,超过的为false
2.以10开头的字节不能单独出现
3.要注意数组越界的情况,比如所某个字节开头三个1,但是它后面只有一个字节了,这样就会出现数组越界的情况
考虑到了所有的特殊情况之后就是简单的模拟了
1 class Solution { 2 public boolean validUtf8(int[] data) { 3 toBinary(data); 4 int len = data.length; 5 for(int i = 0; i < len; i++){ 6 String str = String.valueOf(data[i]); 7 int n = i; 8 if(str.length() == 8){ 9 for(int j = 0; j < 8; j++){ 10 if(str.charAt(j) == '1'){ 11 n++; 12 }else{ 13 break; 14 } 15 } 16 } 17 if(n == (i+1) || (n - i) > 4){ 18 return false; 19 } 20 while(i < (n - 1)){ 21 i++; 22 if(i >= len){ 23 return false; 24 } 25 String str2 = String.valueOf(data[i]); 26 if(!(str2.charAt(0) == '1' && str2.charAt(1) == '0') || str2.length() < 8){ 27 return false; 28 } 29 } 30 } 31 return true; 32 } 33 public void toBinary(int[] data){ 34 int len = data.length; 35 for(int i = 0; i < len; i++){ 36 int num = data[i]; 37 int p = 0; 38 int temp = 0; 39 while(num > 0){ 40 temp += (num % 2) * Math.pow(10,p++); 41 num /= 2; 42 } 43 data[i] = temp; 44 } 45 } 46 }
。
位运算也能解