二进制每一位分开计算,当前位有n个1,则有size-n个0,则不一样个数为n*(size-n)。
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int visit[32] = {0};
for (auto &index:nums) {
for (int i = 0; i < 32; i++)
if (index & (1 << i))
visit[i] ++;
}
int ans = 0;
for (auto &index:visit) {
ans += index * (nums.size() - index);
}
return ans;
}
};