方法一:内置位计数功能 思路
大多数编程语言中,都存在各种内置计算等于 1 的位数函数。如果这是一个项目中的问题,应该直接使用内置函数,而不是重复造轮子。
但这是一个力扣问题,有人会认为使用内置函数就好像使用 使用 LinkedList 实现 LinkedList。对此,我们完全赞同。因此后面会有手工实现的位计数算法。
代码:
class Solution(object): def hammingDistance(self, x, y): """ :type x: int :type y: int :rtype: int """ return bin(x^y).count("1")
方法2:先求异或的值,然后按位统计距离的个数,异或的值再进行移位
将x,y按位异或得到i,将问题转化为求i的二进制位中1的个数count 当i不为0时,将i与1按位与,判断二进制末尾是不是1,是,count++ 将i右位移一位 重复第二,第三步,直到第二步条件不满足,,即i==0时终止统计, 即可得到i的二进制位中1的个数,问题得解
代码:
class Solution { public: int hammingDistance(int x, int y) { int distance = 0; int xory = x^y;//先求异或的值,然后按位统计距离的个数,异或的值再进行移位 while(xory!=0) { if((xory&1)==1) { distance++; } xory = xory>>1; } return distance; } };