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
}
相关推荐
追随者永远是胜利者几秒前
(LeetCode-Hot100)19. 删除链表的倒数第 N 个结点
java·算法·leetcode·链表·go
24白菜头33 分钟前
2026-2-9:LeetCode每日一题(动态规划专项)
数据结构·笔记·学习·算法·leetcode
YGGP43 分钟前
【Golang】LeetCode 41. 缺失的第一个正数
算法·leetcode·职场和发展
菜鸡儿齐1 小时前
leetcode-最大子数组和
数据结构·算法·leetcode
iAkuya1 小时前
(leetcode)力扣100 71字符串解码(栈(两种)||递归)
windows·算法·leetcode
样例过了就是过了1 小时前
LeetCodere热题100 最小覆盖子串
数据结构·算法·leetcode
追随者永远是胜利者1 小时前
(LeetCode-Hot100)10. 正则表达式匹配
java·算法·leetcode·go
We་ct1 小时前
LeetCode 146. LRU缓存:题解+代码详解
前端·算法·leetcode·链表·缓存·typescript
努力学算法的蒟蒻1 小时前
day87(2.16)——leetcode面试经典150
数据结构·leetcode·面试
追随者永远是胜利者1 小时前
(LeetCode-Hot100)17. 电话号码的字母组合
java·算法·leetcode·职场和发展·go