393. UTF-8 Validation

 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 }

 

转载于:https://www.cnblogs.com/goPanama/p/9868735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值