class Solution:
def totalHammingDistance(self, nums: List[int]) -> int:
#暴力超时
# res = 0
# for i in range(len(nums)):
# for j in range(i+1,len(nums)):
# count = bin(nums[i]^nums[j]).count('1')
# res+=count
# return res
#在n个数中,对一个bit,有x个1,n-x个0:则该bit上的hamming距离为x*(n-x)。
n = len(nums)
ans = 0
for i in range(30):
c = sum(((val >> i) & 1) for val in nums)
ans += c * (n - c)
return ans
题目分析:
- 暴力法
- 暴力法比较简单显然超时
- 因为两轮循环
- 30位运算
- 汉明距离是计算比特位不同的位数
- 以每一个比特位来进行计算,然后将每个比特位计算出来相加即可
- 在一个bit中,有x个1,则有n-x个0.那么在该比特上的汉明距离就是x*(n-x)
- 然后右移,计算每个bit位上的汉明距离,加起来即可