Leetcode 461.Hamming Distance

461.Hamming Distance

Description

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231

Example: 
Input: x = 1, y = 4

Output: 2

Explanation:  
1   (0 0 0 1)  
4   (0 1 0 0)  
       ↑   ↑  

The above arrows point to positions where the corresponding bits are
different.

Solution:

/*题目的意思是 输入两个int型变量x,y 编写函数返回x,y二进制位中有多少位不同。
我的做法是 借用一个中间变量 1、10、100、1000、10000...... 就是十进制的  
1、2、4.....  用这个中间变量分别和x、y与运算,如果结果相同那么说明x、y对  
应位相同,否则不同。  */

int hammingDistance(int x, int y) {
    int midNum = 1,rnt = 0;;
    int maxNum = x > y?x:y;
    while (midNum <= maxNum) {
        if ((midNum & x) != (midNum & y))
            rnt++;

        midNum <<= 1;
        if (!midNum) break; //之前没有这行,会溢出,导致死循环。
    }

    return rnt;
}

//在讨论区里面,我发现了其他写法,也陈列如下:
int hammingDistance(int x, int y) {
  int cmpNum = x ^ y;
    int rnt = 0;

    while (cmpNum) {
        rnt += cmpNum % 2;

        cmpNum /= 2;    
    }

    return rnt;
}

int hammingDistance(int x,int y) {
    int temp = x ^ y;
    if (!temp) return 0;
    return temp % 2 + hammingDistance(x / 2,y / 2);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值