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. 汉明距离的主要内容,如果未能解决你的问题,请参考以下文章