461. 汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。

思路:

1、采用异或的方法,相同为0,不同为1
0 0 1 1
0 1 1 0
————
0 1 0 1
2、n&(n-1)的结果消去了 n 中最右边的1.

class Solution {
public:
    int hammingDistance(int x, int y) {
        // 异或:相同为 0、不同为 1
        // 也就是统计 x 与 y 异或之后的结果中 1 的个数,变成了剑指offer中的一道题。。。
        int res = 0;
        int xor_res = x ^ y;
        while(xor_res!=0){
        	res++;
        	xor_res=xor_res&(xor_res-1);
        }
        return res;
    }
};

你可能感兴趣的:(leetcode刷题)