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
}
相关推荐
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
Dream it possible!2 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树的最小绝对差(85_530_C++_简单)
c++·leetcode·面试
xxxxxxllllllshi2 小时前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
wavemap5 小时前
先到先得:免费订阅一年ChatGPT Go会员
开发语言·chatgpt·golang
-森屿安年-6 小时前
LeetCode 283. 移动零
开发语言·c++·算法·leetcode
浮尘笔记6 小时前
Go并发编程核心:Mutex和RWMutex的用法
开发语言·后端·golang
元亓亓亓8 小时前
LeetCode热题100--79. 单词搜索
算法·leetcode·职场和发展
百***06018 小时前
【Golang】——Gin 框架中的表单处理与数据绑定
microsoft·golang·gin
百***93509 小时前
【Golang】——Gin 框架中间件详解:从基础到实战
中间件·golang·gin
2501_941143739 小时前
缓存中间件Redis与Memcached在高并发互联网系统优化与实践经验分享
leetcode