两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
错解:
暴力超时
class Solution: def totalHammingDistance(self, nums: List[int]) -> int: s=0 for i in nums: for j in nums: if i!=j: a=bin(i^j).count('1') s+=a return s//2
正解:
#每一位上1的个数乘以0的个数就是汉明距离。所以就遍历32位 class Solution: def totalHammingDistance(self, nums: List[int]) -> int: n=len(nums) res=0 for i in range(32):#遍历32位 cnt1=0 for num in nums: # 统计每个数第i位上1的个数 cnt1+=1&(num>>i)#与运算, res+=cnt1*(n-cnt1) return res