持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
方法一:位运算
我们只需要按照题意,分别提取出和的每一位,看看它们是否相等。
如果不相等,答案数量+1
怎么“提取”出在二进制下的某一位呢?
假设我们要提取的二进制下从低到高的第位,那么我们可以构造一个用来进行与运算的数
int mask = 1 << i;
这样在二进制下就是
我们用与进行与运算,得到的就是的这一位以及后面的数个
- 时间复杂度,其中
- 空间复杂度
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 >> i) & 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:letmefly.blog.csdn.net/article/det…