The Hamming Distance between two integers is the number of positions at which the corresponding bits are different.
Now your job is to find the total Hamming distance between all pairs of the given numbers.
Example:
Input: 4, 14, 2
Output: 6
Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showing the four bits relevant in this case). So the answer will be:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
思路:依次遍历所有的数,变成二进制看最后一位,是否相同,例如:3个1和2个0 就会计算出2*3=6,然后累加。
代码如下:
public int TotalHammingDistance(int[] nums)
{
int len = nums.Length;
bool bContinue = true;
int count = 0;
while (bContinue)
{
int count0 = 0;
int count1 = 0;
bContinue = false;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] % 2 == 1)
{
count1++;
}
else
{
count0++;
}
nums[i] = nums[i] >> 1;
if (!bContinue && nums[i] > 0)
{
bContinue = true;
}
}
count += count0 * count1;
}
return count;
}