Hamming Distance 问题

前言

经过了好久,终于开始学习算法,刷算法题了。从LeetCode上开始刷题。也是完成之前立下的flag

Hamming Distance(#461)

编号名称等级
461Hamming DistanceEasy

这个试题 主要是计算 两个数源码中有几位不相同。

对于这个问题,首先我想到的是用按位异或(^),按位异或后再用递归移位来计算。这仅仅是一个想法。但是思考了好久都没有写出来。无奈之下只好到 Discuss 看一下。

原来还有这个奇淫技巧。。。。。

Java 是提供了 API 来统计原码中的 1 的。这个方法叫做 binCount() 。 这个题就这样解决了。

1
2
3
4
5
public class Solution {
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }
}

Total Hamming Distance(#477)

编号名称等级
477Total Hamming Distancemedium

该题只不过是把给出的数组中的每两个数的 Hamming Distance 相加。

还是使用 #461 的方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public class Solution {
    public int totalHammingDistance(int[] nums) {
        for (int i = 0; i< nums.length-1;i++){
            for(int j = i+1;j<nums.length;j++){ 
                sum += Integer.bitCount(nums[i] ^ nums[i + 1]);
           }
        }
        return sum;
    }
}