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

题目:

题解:

Go 复制代码
const mask1, mask2 = 1 << 7, 1<<7 | 1<<6

func getBytes(num int) int {
    if num&mask1 == 0 {
        return 1
    }
    n := 0
    for mask := mask1; num&mask != 0; mask >>= 1 {
        n++
        if n > 4 {
            return -1
        }
    }
    if n >= 2 {
        return n
    }
    return -1
}

func validUtf8(data []int) bool {
    for index, m := 0, len(data); index < m; {
        n := getBytes(data[index])
        if n < 0 || index+n > m {
            return false
        }
        for _, ch := range data[index+1 : index+n] {
            if ch&mask2 != mask1 {
                return false
            }
        }
        index += n
    }
    return true
}
相关推荐
Navigator_Z9 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil20810 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
Nil20810 小时前
leetcode 72编辑距离
算法·leetcode·职场和发展
Nil20811 小时前
leetcode 136只出现一次的数字
leetcode·哈希算法·散列表
tachibana211 小时前
Go 语言里的 Context 是什么?
开发语言·后端·golang·go·语言
lvwangshu12 小时前
川剧复演 题解
动态规划·题解·技巧·性质题·思维好题
局部有解16 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
Nil20818 小时前
leetcode 75颜色分类
数据结构·算法·leetcode
茉莉玫瑰花茶18 小时前
GO [ 数据格式 ]
服务器·网络·算法·golang
aqiu11111118 小时前
CodeTop按顺序刷题0003:LeetCode 206. 反转链表(迭代法图文详解与动态演示)
算法·leetcode·链表