第393题---UTF-8 Validation

  • 题意描述

    • 给定一个数组,数组中的每一个数组都代表一个8位的二进制数,0-255之间,则按照UTF-8的规则,判断这个数组是不是一个UTF-8的字符
  • 解题思路

    • 分类,但是不要嵌套分类
    • 第一位为0的情况;前两位为110的情况;前三位为1110的情况;前四位为11110的情况
    • 刚开始考虑的直接,if-else套if-else,逻辑混乱。现在直接每一种情况用一个函数调用
  • 代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    class Solution {
    public:
    bool isOne(int num, int k) {
    int flag = 1 << (8-k);
    return num & flag;
    }
    bool isOneZero(int num) {
    return isOne(num, 1) && (!isOne(num, 2));
    }
    bool isOneOneZero(int num) {
    return isOne(num, 1) && isOne(num, 2) && (!isOne(num, 3));
    }
    bool isOneOneOneZero(int num) {
    return isOne(num, 1) && isOne(num, 2) && isOne(num, 3) && (!isOne(num, 4));
    }
    bool isOneOneOneOneZero(int num) {
    return isOne(num, 1) && isOne(num, 2) && isOne(num, 3) && isOne(num, 4) && (!isOne(num, 5));
    }
    bool validUtf8(vector<int>& data) {
    int size = data.size();
    if(size == 0)
    return false;
    int index = 0;
    for(int index = 0; index < size;) {
    if(!isOne(data[index], 1)) {
    index ++;
    } else if (isOneOneZero(data[index])) {
    if(isOneZero(data[index+1]))
    index += 2;
    else
    return false;
    } else if (isOneOneOneZero(data[index])) {
    if(isOneZero(data[index+1]) && isOneZero(data[index+2]))
    index += 3;
    else
    return false;
    } else if (isOneOneOneOneZero(data[index])) {
    if(isOneZero(data[index+1]) && isOneZero(data[index+2]) && isOneZero(data[index+3]))
    index += 4;
    else
    return false;
    } else
    return false;
    }
    return true;
    }
    };
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章