Java | Leetcode Java题解之第393题UTF-8编码验证

题目:

题解:

java 复制代码
class Solution {
    static final int MASK1 = 1 << 7;
    static final int MASK2 = (1 << 7) + (1 << 6);

    public boolean validUtf8(int[] data) {
        int m = data.length;
        int index = 0;
        while (index < m) {
            int num = data[index];
            int n = getBytes(num);
            if (n < 0 || index + n > m) {
                return false;
            }
            for (int i = 1; i < n; i++) {
                if (!isValid(data[index + i])) {
                    return false;
                }
            }
            index += n;
        }
        return true;
    }

    public int getBytes(int num) {
        if ((num & MASK1) == 0) {
            return 1;
        }
        int n = 0;
        int mask = MASK1;
        while ((num & mask) != 0) {
            n++;
            if (n > 4) {
                return -1;
            }
            mask >>= 1;
        }
        return n >= 2 ? n : -1;
    }

    public boolean isValid(int num) {
        return (num & MASK2) == MASK1;
    }
}
相关推荐
慕言手记1 分钟前
IDEA 插件常用-2026版
java·ide·spring boot·intellij-idea·idea·intellij idea
颖火虫盟主3 分钟前
Hello World MCP Server 实现总结
java·前端·python
iiiiyu22 分钟前
⾯向对象和集合编程题
java·大数据·开发语言·数据结构·编程语言
超級二蓋茨22 分钟前
asp.net core中JwtBearerEvents中几个事件的生命周期
java·服务器·asp.net
Full Stack Developme23 分钟前
Spring-web 解析
java·前端·spring
人道领域34 分钟前
【LeetCode刷题日记】513.二叉树左下角值的三种解法:从常规BFS到DFS的优雅之旅
数据结构·算法·leetcode·深度优先·广度优先
devilnumber36 分钟前
如何在java的Lambda中安全地修改外部变量?
java·安全·lambda
大得36936 分钟前
langchain使用
java·python·langchain
带刺的坐椅37 分钟前
SolonCode CLI 的心智记忆功能:让 AI 编程助手越用越懂你
java·ai·llm·cli·soloncode
我命由我123451 小时前
Visual Studio - Visual Studio 注释快捷键
java·c语言·开发语言·c++·ide·java-ee·visual studio