C++ | Leetcode C++题解之第393题UFT-8编码验证

打印 上一主题 下一主题

主题 1044|帖子 1044|积分 3132

题目:

题解:
  1. class Solution {
  2. public:
  3.     static const int MASK1 = 1 << 7;
  4.     static const int MASK2 = (1 << 7) + (1 << 6);
  5.     bool isValid(int num) {
  6.         return (num & MASK2) == MASK1;
  7.     }
  8.     int getBytes(int num) {
  9.         if ((num & MASK1) == 0) {
  10.             return 1;
  11.         }
  12.         int n = 0;
  13.         int mask = MASK1;
  14.         while ((num & mask) != 0) {
  15.             n++;
  16.             if (n > 4) {
  17.                 return -1;
  18.             }
  19.             mask >>= 1;
  20.         }
  21.         return n >= 2 ? n : -1;
  22.     }
  23.     bool validUtf8(vector<int>& data) {
  24.         int m = data.size();
  25.         int index = 0;
  26.         while (index < m) {
  27.             int num = data[index];
  28.             int n = getBytes(num);
  29.             if (n < 0 || index + n > m) {
  30.                 return false;
  31.             }
  32.             for (int i = 1; i < n; i++) {
  33.                 if (!isValid(data[index + i])) {
  34.                     return false;
  35.                 }
  36.             }
  37.             index += n;
  38.         }
  39.         return true;
  40.     }
  41. };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表