Hamming Distance(leetcode)

来源:互联网 发布:王者荣耀知乎 编辑:程序博客网 时间:2024/06/18 11:11

Hamming Distance

  • Hamming Distance
    • 题目
    • 题目解析
    • 解决
      • 第一种解决方法
      • 第二种解决方法


题目

leetcode题目

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 = 4Output: 2Explanation:1   (0 0 0 1)4   (0 1 0 0)       ↑  ↑

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


题目解析

题目中告诉我们会有两个整数x和y,我们需要将x和y变成32位的01字符串,判断相同位置上数字不同的个数。
这样我们可以先将x和y异或,因为异或是相同为零、不同为一的运算,这样我们得到异或的结果后只需要判断里面“1”的个数就行了。


解决

第一种解决方法

class Solution {public:    int hammingDistance(int x, int y) {        int result = 0;        int temp = x ^ y;        for (int i = 0; i < 32; ++i) {            result += (temp >> i) & 1; // 一位一位遍历        }        return result;    }};

第二种解决方法

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