【leetcode】461 HammingDistance

从今天开始每天刷一道LeetCode算法题,可不能再偷懒了

题目:

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.

$$
0 \leq x, y < 2^{31}
$$
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.
Subscribe to see which companies asked this question.

问题陈述:

求两个数的汉明距离,就是找出这两个数的二进制形式对应位不相同的位,求这样的位的个数

用c++的位操作符:

操作符 功能 用法
~ 取反 0变1,1变0
<< 左移 后面补0
>> 右移 前面补0,后面吞位
& 位与 只有两个都为1,则为1。x&…00100…用于提取x某一位
^ 位异或 只有一个为1,则为 1。用于判断两位是否相同 a^b^a = b 用于交换数值
\ 位或 有一个或2个1,则为1。用于做and运算

题目思路:

从末位开始逐位判断x和y是否不同(或者做异或操作),不同则在距离上加1。

class Solution {
public:
int hammingDistance(int x, int y) {
int count = 0;
while(x!=0||y!=0){
if ((x&1) != (y&1)) count++;
x = x>>1;
y = y>>1;
}
return count;
}
};

运行结果:

太艰难了,第一道题做了小半天,哎,一定要坚持下去

参考资料:

  1. 《c++ primer》 位操作符 P134
  2. wcxdell的专栏