问题:java
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.spa
Given two integers x
and y
, calculate the Hamming distance.code
Note:
0 ≤ x
, y
< 2^31.递归
Example:ip
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.
解决:get
【注】题目要求的海明距离其实是指两个二进制数对应位不相同的个数it
① 根据异或的性质:相同为0,不一样为1。因此先求出异或的结果,而后计算结果中1的个数。io
class Solution { // 11ms
public int hammingDistance(int x, int y) {
if(x == y) return 0;
int count = 0;
int tmp = x ^ y;
while(tmp != 0){
tmp = tmp & (tmp - 1);
count ++;
}
return count;
}
}class
② 直接调用java中的方法计算1的个数。二进制
class Solution { // 15ms
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}
③ 在网上看到一种递归的写法,递归终止的条件是当两个数异或为0时,代表此时两个数彻底相同。咱们返回0,不然咱们返回异或和对2取余加上对x>>1和y>>1调用递归的结果。异或和对2取余至关于检查最低位是否相同,而对x>>1和y>>1调用递归至关于将x和y分别向右移动一位,这样每一位均可以比较到,也能获得正确结果。
class Solution { // 10ms public int hammingDistance(int x, int y) { if((x ^ y) == 0) return 0; return (x ^ y) % 2 + hammingDistance(x >> 1,y >> 1); } }