LeetCode 0461. 汉明距离
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0461. 汉明距离相关的知识,希望对你有一定的参考价值。
【LetMeFly】461.汉明距离
力扣题目链接:https://leetcode.cn/problems/hamming-distance/
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x
和 y
,计算并返回它们之间的汉明距离。
示例 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. 汉明距离的主要内容,如果未能解决你的问题,请参考以下文章