日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 393. UTF-8 编码验证(位运算)

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 393. UTF-8 编码验证(位运算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

UTF-8 中的一個字符可能的長度為 1 到 4 字節,遵循以下的規則:

  • 對于 1 字節的字符,字節的第一位設為0,后面7位為這個符號的unicode碼。
  • 對于 n 字節的字符 (n > 1),第一個字節的前 n 位都設為1,第 n+1 位設為0,后面字節的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。
    這是 UTF-8 編碼的工作方式:
Char. number range | UTF-8 octet sequence(hexadecimal) | (binary)--------------------+---------------------------------------------0000 0000-0000 007F | 0xxxxxxx0000 0080-0000 07FF | 110xxxxx 10xxxxxx0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 給定一個表示數據的整數數組,返回它是否為有效的 utf-8 編碼。注意: 輸入是整數數組。只有每個整數的最低 8 個有效位用來存儲數據。 這意味著每個整數只表示 1 字節的數據。示例 1: data = [197, 130, 1], 表示 8 位的序列: 11000101 10000010 00000001. 返回 true 。 這是有效的 utf-8 編碼,為一個2字節字符,跟著一個1字節字符。示例 2: data = [235, 140, 4], 表示 8 位的序列: 11101011 10001100 00000100. 返回 false 。 前 3 位都是 1 ,第 4 位為 0 表示它是一個3字節字符。 下一個字節是開頭為 10 的延續字節,這是正確的。 但第二個延續字節不以 10 開頭,所以是不符合規則的。

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/utf-8-validation
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 前面1的個數不能為1或者大于4
  • 為0的跳過,檢查下一個
  • 為2-4,檢查后面個數足不足,且都以10開頭
class Solution { public:bool validUtf8(vector<int>& data) {int i = 0, j, one = 0, n = data.size();while(i < n){for(j = 7; j >= 0; --j){if((data[i]&(1<<j)))//該位為1one++;//1的個數elsebreak;}if(one==1 || one > 4)return false;i++;if(one == 0)continue;//0個1,檢查下一位if(n-i < one-1) return false;//個數不夠,不行for( ; i < n && (--one); ++i)//后面均以10開頭{if(((data[i]>>7)&1)!=1 || ((data[i]>>6)&1)!=0)return false;}}return true;} };

28 ms 13.4 MB

總結

以上是生活随笔為你收集整理的LeetCode 393. UTF-8 编码验证(位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。