Leetcode 461. 汉明距离 位运算
地址 https://leetcode-cn.com/problems/hamming-distance/
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x 和 y,计算并返回它们之间的汉明距离。
示例 1:
输入:x = 1, y = 4
输出:2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
示例 2:
输入:x = 3, y = 1
输出:1
提示:
0 <= x, y <= 231 - 1
解答
位运算 二进制下逐位计算,查看两个数该位是否一个为1一个不为1,则记录进答案。
另外要考虑,x y二进制下位数不一致 比如一个是 1010 一个是1101010101;
那么有额外位数的数字带有1的位置均加入答案。
上述思路 例子1的分析就是 1和4
1
1 0 0
有两位,在二进制下一个为1 一个不为1
例子2的分析是 3 和1
1
1 1
有一位 在二进制下一个为1 一个不为1
代码如下
class Solution {
public:
int hammingDistance(int x, int y) {
int ans =0;
while(x!=0 && y!=0){
int a = x&1;
int b = y&1;
if(a!=b){ans++;}
x>>=1; y>>=1;
}
int left =0;
if(x==0){
left=y;
}else if(y==0){
left=x;
}
while(left!=0){
if(left&1){
ans++;
}
left>>=1;
}
return ans;
}
};
我的视频题解空间