有点慢,两层循环也可以完成,就是换个方向,外层遍历32大小的bits数组,里层遍历nums的数字每次右移一位,计算方法类似。
class Solution {public int totalHammingDistance(int[] nums) {//int 是4byte , 每个byte对应8位(比特),所以一个int是32位int [] bits = new int[32];int res=0, len = nums.length;for (int j : nums) {int index = bits.length - 1;while(j != 0){if(j == 1){bits[index]++;break;}if(j % 2 == 1){bits[index]++;}j = j / 2;index--;}}for (int bit : bits) {res += (bit * (nums.length - bit));}return res;}
}