海明距离 Hamming Distance

问题:java

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.spa

Given two integers x and y, calculate the Hamming distance.code

Note:
0 ≤ xy < 2^31.递归

Example:ip

Input: x = 1, y = 4
Output: 2
Explanation:
1   (0 0 0 1)
4   (0 1 0 0)
       ?   ?
The above arrows point to positions where the corresponding bits are different.

解决:get

【注】题目要求的海明距离其实是指两个二进制数对应位不相同的个数it

① 根据异或的性质:相同为0,不一样为1。因此先求出异或的结果,而后计算结果中1的个数。io

class Solution { // 11ms
    public int hammingDistance(int x, int y) {
        if(x == y) return 0;
        int count = 0;
        int tmp = x ^ y;
        while(tmp != 0){
            tmp = tmp & (tmp - 1);
            count ++;
        }
        return count;
    }
}class

② 直接调用java中的方法计算1的个数。二进制

class Solution { // 15ms
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }
}

③ 在网上看到一种递归的写法,递归终止的条件是当两个数异或为0时,代表此时两个数彻底相同。咱们返回0,不然咱们返回异或和对2取余加上对x>>1和y>>1调用递归的结果。异或和对2取余至关于检查最低位是否相同而对x>>1和y>>1调用递归至关于将x和y分别向右移动一位,这样每一位均可以比较到,也能获得正确结果。

class Solution { // 10ms     public int hammingDistance(int x, int y) {         if((x ^ y) == 0) return 0;         return (x ^ y) % 2 + hammingDistance(x >> 1,y >> 1);     } }

相关文章
相关标签/搜索