【golang】leetcode初级-位1的个数&汉明距离

第一题 位1的距离

题目

【golang】leetcode初级-位1的个数&汉明距离_第1张图片

解题思路

对于二进制数的操作
位运算无疑是最高效的
最直接的思路是
直接用与运算读取1的个数
循环32次后返回计数器的值

代码

func hammingWeight(num uint32) int {
    var count int
    k := 32
    for i := 0; i < k; i++ {
        a := num & 1
        count += int(a)
        num = num >> 1
    }
    return count
}

复杂度分析及优化

【golang】leetcode初级-位1的个数&汉明距离_第2张图片

第二题 汉明距离

题目

【golang】leetcode初级-位1的个数&汉明距离_第3张图片

解题思路

可以发现
在将x与y进行异或之后
我们把一个复杂的问题转换成为了已解决的问题

代码

func hammingDistance(x int, y int) int {
    return hammingWeight(uint32(x)^uint32(y))
}
func hammingWeight(num uint32) int {
    var count int
    k := 32
    for i := 0; i < k; i++ {
        a := num & 1
        count += int(a)
        num = num >> 1
    }
    return count
}

优化

【golang】leetcode初级-位1的个数&汉明距离_第4张图片
【golang】leetcode初级-位1的个数&汉明距离_第5张图片

你可能感兴趣的:(【golang】leetcode初级-位1的个数&汉明距离)