第一题 位 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
}
复杂度剖析及优化
第二题 汉明间隔
题目
解题思路
能够发现
在将 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
}