461.Hamming Distance
Description
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integersx
andy
, 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.
Solution:
/*题目的意思是 输入两个int型变量x,y 编写函数返回x,y二进制位中有多少位不同。
我的做法是 借用一个中间变量 1、10、100、1000、10000...... 就是十进制的
1、2、4..... 用这个中间变量分别和x、y与运算,如果结果相同那么说明x、y对
应位相同,否则不同。 */
int hammingDistance(int x, int y) {
int midNum = 1,rnt = 0;;
int maxNum = x > y?x:y;
while (midNum <= maxNum) {
if ((midNum & x) != (midNum & y))
rnt++;
midNum <<= 1;
if (!midNum) break; //之前没有这行,会溢出,导致死循环。
}
return rnt;
}
//在讨论区里面,我发现了其他写法,也陈列如下:
int hammingDistance(int x, int y) {
int cmpNum = x ^ y;
int rnt = 0;
while (cmpNum) {
rnt += cmpNum % 2;
cmpNum /= 2;
}
return rnt;
}
int hammingDistance(int x,int y) {
int temp = x ^ y;
if (!temp) return 0;
return temp % 2 + hammingDistance(x / 2,y / 2);
}