leetcode 461. 汉明距离

Posted 深林无鹿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 461. 汉明距离相关的知识,希望对你有一定的参考价值。

这里有leetcode题集分类整理!!!

题目难度:简单
题目描述:


方法一:通过位运算,加与运算记述
解题思路:

要计算两个数字二进制位数不同的地方,只需要先计算出两个数的异或值,即可,然后通过位运算记录每个位置上面不等于一的情况。

code:

class Solution 
    public int hammingDistance(int x, int y) 
        int s = x ^ y;
        int ans = 0;
        while (s != 0) 
            ans += s & 1;
            s >>= 1;
        
        return ans;
    

方法二:使用包装类自带的函数进行计数
解题思路:

Java 中 Integer 包装类自带的 bitCount 函数可以对二进制中1的个数进行返回,就可以对方法一进行优化

code:

class Solution 
    public int hammingDistance(int x, int y) 
        return Integer.bitCount(x ^ y);
    

方法三:Brian Kernighan 算法

算法介绍: 这个算法的意思是,对任何一个数 n nn,n & ( n − 1 ) n&(n-1)n&(n−1)的结果是n nn的比特位最右端的1变为0的结果。例如,n = 12 , n − 1 = 11 , 11 & 12 = 8 n=12,n-1=11,11&12=8n=12,n−1=11,11&12=8

code:

class Solution 
public int hammingDistance(int x, int y) 
        int s = x ^ y;
        int ans = 0;
        while (s != 0) 
            s &= s - 1;
            ans ++;
        
        return ans;
    

以上是关于leetcode 461. 汉明距离的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode--461--汉明距离

LeetCode 461. 汉明距离

leetcode461 汉明距离

461-汉明距离

统计二进制中1的个数(LeetCode 461. 汉明距离 or LeetCode 191. 位1的个数)

LeetCode 461. Hamming Distance (汉明距离)