从0开始的LeetCode生活—461-Hamming Distance(汉明距离)

Posted

tags:

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

题目:

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

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

Note:
0 ≤ x, y < 231.

Example:

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.

题目大意:

给你两个数字,返回这两个数字的汉明距离,汉明距离就是看两个数字的二进制代码,按位异或,比如1和4,二进制分别为(0001)和(0100),一个个异或比较后得到(0101)因为第二位和第四位不一样。然后数一下得到的数有几个1.这里有两个1,所以返回2

解法:

这是一个简单的题目,先定义一个计数器和一个记录两个数字异或的变量。即int cnt=0;int e=x^y;

然后数一下e的二进制代码里面有几个1,我的做法是让它与1按位与,如果和1按位与是1,那么就说明当前最后一位是1,如果不是,那当前最后一位为0.然后再左移,直到它变为0

比如说1和4,按位与后得到的e==5(二进制为0101)

1)与1按位与,得到1,则cnt+1;

2)右移一位,得到(010),与1按位与后得到0,则cnt不改变;

3)右移,得到(01),与1按位与得到1,cnt+1;

4)右移,得到(0),与1按位与得到0,cnt不变;

5)此时e==0,退出循环,返回cnt的值,即2.

代码:

int hammingDistance(int x, int y) {
    int r=0,e=x^y;
    while(e){
        if(e&1)
            ++r;
        e>>=1;
    }
    return r;
}

 


以上是关于从0开始的LeetCode生活—461-Hamming Distance(汉明距离)的主要内容,如果未能解决你的问题,请参考以下文章

资料 | 从 0 开始刷 LeetCode 的心得记录

[从 0 开始的 Angular 生活]No.38 实现一个 Angular Router 切换组件页面

[Leetcode Weekly Contest]258

LeetCode Daily 21

[LeetCode]面试题62. 圆圈中最后剩下的数字(数学)

[LeetCode]面试题62. 圆圈中最后剩下的数字(数学)