本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
一、题目描述
二、解题思路
leetcode每日一题,今天特别简单。难得直接手撕代码一遍过。
1.异或位运算+1统计
看看汉明距离的定义:
两个数字对应二进制位不同位置的数目。
第一反应是异或操作,口诀“异异1,同同0”。
正好可以将不同位留下来。
那剩下的就是怎么统计数字中1的个数。
这是不是就很熟悉了 leetcode.191位1的个数
代码实现
class Solution {
public int hammingDistance(int x, int y) {
int temp = x^y;
int result = 0;
while(temp>0){
result++;
temp = temp&(temp-1);
}
return result;
}
}
时间复杂度分析
时间复杂度:O(logn)。循环次数等于n的二进制位中1的个数,最坏情况下n的二进制位全部为1。我们需要循环logn次。
- O(logn)
空间复杂度分析
常数辅助空间,因此空间复杂度:
- O(1)
不晓得我讲清楚了没有,请大家多多指教。
今日打卡结束!