Leetcode题解之其他(2)汉明距离

本文详细介绍了如何计算两个整数之间的汉明距离,通过异或运算和位操作统计不同位的数量,提供了两种实现方法,包括直接位操作和字符串转换对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/65/

题目描述:

 汉明距离

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

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ xy < 231.

示例:

输入: x = 1, y = 4

输出: 2

解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

 

思路:可以对X 和Y进行异或运算 得到temp 。然后计算temp 位为1 的个数。这里还利用了temp=temp&temp-1 的技巧 统计位为1的个数。比如: temp =1011  temp-1 = 1010 , temp&temp-1 = 1010    count +1 ;

                            temp = 1010 temp-1 = 1001 , temp&temp-1 = 1000  count+1;

                            temp = 1000 temp -1 = 0111 , temp&temp-1 =0000  count +1;   temp =0 结束。刚好count 为 temp位为1的个数

 

代码:

class Solution {
     public int hammingDistance(int x, int y) {
            int res = 0;
            int temp = x ^ y;
            while (temp!= 0) {
                res ++;
                temp &= (temp - 1);
            }
            return res;
        }

     //另外的方法
     public int hammingDistance3(int x, int y) {
        int res = 0;

        String s1 = Integer.toBinaryString(x);
        String s2 = Integer.toBinaryString(y);
        int len1 = s1.length();
        int len2 = s2.length();

        while (len1 > len2) {
            s2 = "0" + s2;
            len2++;
        }
        while (len1 < len2) {
            s1 = "0" + s1;
            len1++;
        }
        char[] a = s1.toCharArray();
        char[] b = s2.toCharArray();
        for (int i = 0; i < len1; i++) {
            if (a[i] != b[i]) {
                res++;
            }
        }
        return res;
    }
    public static void main(String[] args) {
        System.out.println(hammingDistance1(7,8));
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值