461. 汉明距离

北战南征 提交于 2020-03-07 02:59:42

https://leetcode-cn.com/problems/hamming-distance/

#define LL long long
class Solution {
public:
    int hammingDistance(int x, int y) {
        LL t = x^y;
        LL ans=0;
        while(t){
            ans+=1;
            t = t&(t-1); 
        }
        return ans;
    }
};

补一张真值表
在这里插入图片描述

另外学到了一个 x & (x-1)的妙用
x-1会使得x的最右边的1变为0
x & (x-1) 假如x只有一个1,那么结果就是0了

class Solution {
public:
    int hammingDistance(int x, int y) {
        x = x ^ y;  //异或,只留下两者不同的位数为1
        y = 0;
        while(x){
            y++;
            x = x & (x-1);
        }
        return y;
    }
};

python的实现一样的

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        x=x^y
        ans=0
        while(x):
            ans+=1
            x=x&(x-1)
        return ans

在这里插入图片描述
但是更快的是直接调库

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        z=x^y
        return bin(z).count("1")

bin的文档解释:

bin(x)
Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an index() method that returns an integer.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!