医药类网站建设评价,现在外贸推广做哪个平台,买域名做网站,上海专业网站建站公LeetCode#xff1a;汉明距离
一、题目描述
两个整数之间的汉明距离是指这两个数字对应二进制位不同的位置的数目。 给你两个整数x 和 y#xff0c;计算并返回他们之间的汉明距离。
二、分析及代码实现
对于汉明距离问题我们其实可以将其转换为#xff1a;计算x 和 y按…LeetCode汉明距离
一、题目描述
两个整数之间的汉明距离是指这两个数字对应二进制位不同的位置的数目。 给你两个整数x 和 y计算并返回他们之间的汉明距离。
二、分析及代码实现
对于汉明距离问题我们其实可以将其转换为计算x 和 y按位异或后求结果中1 的位数。 本题这里我们给出两种解题方法
方法1内置位计数功能
class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x ^ y);}
}方法2移位实现位计算 算法核心思想如下
1、首先计算出x 按位异或 y记作s x ^ y并新建计数器result用于记录s的二进制表示中1的位数2、通过s 按位与 1 不断的检查 s的最低位如果最低位为 1 那么令计数器加 1然后我们令 s 的整体位右移 1 位这样最低位就被舍弃原本的次位变成了最低位。我们重复这个过程直到 s 0 为止。这样计数器中就累计了 s 的二进制表示中1的数量。
上代码
public int hammingDistance(int x, int y) {int s x ^ y;int result 0;while (s ! 0) {result s 1; //s按位与1按位与如果两个相应的二进制都为1则该位的结果为1否则为0s s 1; //s二进制整体右移1位}return result;}