leetcode 461. 汉明距离

方法一:内置位计数功能 思路

大多数编程语言中,都存在各种内置计算等于 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;
    }
};

 

posted @ 2021-09-26 15:47  A-inspire  Views(25)  Comments(0Edit  收藏  举报