LeetCode 0461. 汉明距离

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0461. 汉明距离相关的知识,希望对你有一定的参考价值。

【LetMeFly】461.汉明距离

力扣题目链接:https://leetcode.cn/problems/hamming-distance/

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

给你两个整数 xy,计算并返回它们之间的汉明距离。

 

示例 1:

输入:x = 1, y = 4
输出:2
解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
上面的箭头指出了对应二进制位不同的位置。

示例 2:

输入:x = 3, y = 1
输出:1

 

提示:

  • 0 <= x, y <= 231 - 1

方法一:位运算

我们只需要按照题意,分别提取出 x x x y y y的每一位,看看它们是否相等。

如果不相等,答案数量+1

怎么“提取”出 x x x在二进制下的某一位呢?

假设我们要提取 x x x的二进制下从低到高的第 i + 1 i + 1 i+1位,那么我们可以构造一个用来进行与运算的数

int mask = 1 << i;

这样 m a s k mask mask在二进制下就是 1000...0 1000...0 1000...0

我们用 x x x m a s k mask mask进行与运算,得到的就是 x x x的这一位以及后面的数个 0 0 0

  • 时间复杂度 O ( C ) O(C) O(C),其中 C = 31 C=31 C=31
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++

class Solution 
public:
    int hammingDistance(int x, int y) 
        int ans = 0;
        for (int i = 0; i < 31; i++) 
            int mask = 1 << i;
            ans += ((x & mask) != (y & mask));
        
        return ans;
    
;

方法二:还是位运算

方法二类似方法一,不同之处是“取出某一位”的方式

方法二中,我们将 x x x右移 i i i位,再与 1 1 1进行与运算,就得到了 x x x的第 i + 1 i+1 i+1

(x >> i) & 1;
  • 时间复杂度 O ( C ) O(C) O(C),其中 C = 31 C=31 C=31
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++

class Solution 
public:
    int hammingDistance(int x, int y) 
        int ans = 0;
        for (int i = 0; i < 31; i++) 
            ans += (((x >> i) & 1) != ((y >> i) & 1));
        
        return ans;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127510681

以上是关于LeetCode 0461. 汉明距离的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-汉明距离

leetcode451 汉明距离(Easy)

LeetCode #461 汉明距离

LeetCode #461 汉明距离

LeetCode--461--汉明距离

LeetCode 461. 汉明距离