「力扣」第 461 题:汉明距离


「力扣」第 461 题:汉明距离

链接:https://leetcode-cn.com/problems/hamming-distance

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

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

注意:
0 ≤ x, y < 231.

示例:

输入: x = 1, y = 4

输出: 2

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

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

Java 代码:

class Solution {
    public int hammingDistance(int x, int y) {
        StringBuilder xx = new StringBuilder(Integer.toBinaryString(x));
        StringBuilder yy = new StringBuilder(Integer.toBinaryString(y));
        if (xx.length() > yy.length()) {
            StringBuilder temp = xx;
            xx = yy;
            yy = temp;
        }
        int diff = yy.length() - xx.length();
        for (int i = 0; i < diff; i++) {
            xx.insert(0,'0');
        }
        int sum = 0;
        for (int i = 0; i < yy.length(); i++) {
            if (xx.charAt(i) != yy.charAt(i)) {
                sum++;
            }
        }
        return sum;
    }
}

Java 代码:

class Solution {
    public int hammingDistance(int x, int y) {
        StringBuilder xx = new StringBuilder(Integer.toBinaryString(x));
        StringBuilder yy = new StringBuilder(Integer.toBinaryString(y));

        boolean bothNegative = x < 0 && y < 0;
        if (!bothNegative) {
            // 始终让 xx 是长度比较小的那个字符串,这样补齐总是在 x 的前面补 0
            if (xx.length() > yy.length()) {
                StringBuilder temp = xx;
                xx = yy;
                yy = temp;
            }
            int diff = yy.length() - xx.length();
            for (int i = 0; i < diff; i++) {
                xx.insert(0, '0');
            }
        }
        int sum = 0;
        for (int i = 0; i < yy.length(); i++) {
            if (xx.charAt(i) != yy.charAt(i)) {
                sum++;
            }
        }
        return sum;
    }
}


文章作者: liweiwei1419
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liweiwei1419 !
评论
 上一篇
「滑动窗口」专题:概述与经典问题 「滑动窗口」专题:概述与经典问题
「滑动窗口」专题 :滑动窗口的基本思想在滑动窗口类型的问题中都会有两个指针。一个用于延伸现有窗口的 right 指针,和一个用于收缩窗口的 left 指针。在任意时刻,只有一个指针运动,而另一个保持静止。 「滑动窗口」的问题其实思想并不难
下一篇 
「力扣」第 448 题:找到所有数组中消失的数字 「力扣」第 448 题:找到所有数组中消失的数字
「力扣」第 448 题:找到所有数组中消失的数字题解地址:桶排序 + 基于“异或运算”交换两个变量的值(Python 代码、Java 代码)。 说明:文本首发在力扣的题解版块,更新也会在第 1 时间在上面的网站中更新,这篇文章只是上面的文章
  目录