LeeCode两个数之间海明距离的

原创 2018年04月16日 18:14:25

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 ≤ xy < 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.

海明距离即是指将两个数字化成二进制数,然后相同权值位进行比较,每有一位数不同则累计加1,最后的结果就是两个数之间的海明距离。在这道题目里面,要计算海明距离则是要对每一位的数字进行比较。那么有以下三种方法(或者说是两种,因为方法二三没有本质上的区别)

方法一:将输入的整数x,y先转变为二进制数,然后逐位进行比较。

①可以考虑用链表对输入的整数x进行逐位的存储。(因为链表可变长度,不像数组那样定下来具体大小之后就没法改变;而输入的整数需要用多少位二进制数进行表示也是不确定的)具体的过程是先建立节点,然后用x%2获得每一位该存储的值,对节点赋值之后别忘了执行x/2操作。同样的y也是这样转变。

②对链表的每个节点进行比较。(先定义一个整型dis对海明距离进行累计)二进制数储存完之后,链表的每一个节点都是之前整数x或者y的一位,读取他们的值进行比较,相同的话dis不变;不同则dis++;最后输出dis即可。

PS:方法一最容易想到,但过于麻烦不推荐使用,所以也就没有附上代码~有兴趣的帅哥美女可以尝试尝试链表操作。

方法二:先将输入的整数x,y进行位异或计算(一一得0,零零得0,一零得一,即是相同为1,不同为0),后用移位的方式统计异或结果中1的个数。

具体代码如下:

int hammingDistance(int x, int y) {
        int z = x^y;    //^为异或符号
int dis = 0;
while(z)
{

if(z&1) //判断z最后一位是否为1

                    dis++;

z=z>>1;   //对z进行移位
}
return dis;

    }


方法三:先将输入的整数x,y进行位异或计算,后以取余方法统计异或结果中1的个数。

int hammingDistance(int x, int y) {
        int z = x^y;
int dis = 0;
for(;z;z/=2)    //z除以2则可以去掉最后一位
if(z % 2 == 1)     //判断最后一位是否为1
dis ++;
return dis;

    }


PS:方法二和方法三其实都是用到了移位,因此没有本质上的区别

4.10.番外篇-程序员和编译器之间的暧昧

本课程总结了之前9章的课程,提出了一个观点;要想真正彻底掌握一门编程语言,就是要掌握它的编译器,熟悉这个语言的风格和脾气。
  • 2015年10月22日 10:41

Leetcode 477. Total Hamming Distance 总海明距离 解题报告

1 解题思想题目的意思就是给了一个数组,现在求总的海明距离,其中: 1、海明距离:任意两个数在二级制的表示下(int = 32bit),每个bit对应的值是1或0,那么这两个数在这32个位置下,取值...
  • MebiuW
  • MebiuW
  • 2016-12-19 19:04:58
  • 1902

LeetCode中关于两个数相加的问题

Given an array of integers, return indices of the two numbers such that they add up to a specific ta...
  • weixin_39183543
  • weixin_39183543
  • 2018-02-26 23:00:16
  • 53

C语言 输出任意两个数之间的质数

#include static int isPrime(int n); void main() { int low,high; int flag=1; while(flag==...
  • qq_21808961
  • qq_21808961
  • 2017-10-06 19:54:33
  • 819

SQL选择两个数之间的记录

  • 2013年03月09日 09:06
  • 316B
  • 下载

找出两个数之间的素数

/* * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: array.cpp * 作 者: 李中意 * 完...
  • u012369267
  • u012369267
  • 2014-01-24 07:05:19
  • 988

C语言从键盘输入两个数,求两个数之间素数的个数并打印所有素数(定义法)

#include int main() { int a,b; printf("please input two numbers \n"); scanf("%d %d",&a,&b); pri...
  • qq_15029743
  • qq_15029743
  • 2018-01-19 15:33:05
  • 154

java求两数之间的所有偶数的和

  • 2012年03月05日 22:33
  • 797B
  • 下载

java生成两数之间随机数实例

JAVA里大部分生成伪随机数用java.util.Random.nextInt(int n)或者java.lang.Math.random()就可以基本满足需求了,当然如果满足不了你的特殊需求,请查看...
  • wangking717
  • wangking717
  • 2009-08-28 02:23:00
  • 4690

获取两个数之间的一个随机数

function dice(minimum, maximum){   return Math.floor(Math.random() * (maximum - minimum + 1)) + mi...
  • mimixiao345
  • mimixiao345
  • 2015-07-14 21:16:33
  • 353
收藏助手
不良信息举报
您举报文章:LeeCode两个数之间海明距离的
举报原因:
原因补充:

(最多只允许输入30个字)