461. 汉明距离|Java 刷题打卡

253 阅读1分钟

本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

一、题目描述

image.png

二、解题思路

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)

不晓得我讲清楚了没有,请大家多多指教。
今日打卡结束!