• Leetcode#461. Hamming Distance(汉明距离)


    题目描述

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

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

    注意:
    0 ≤ x, y < 231.

    示例:

    输入: x = 1, y = 4
    
    输出: 2
    
    解释:
    1   (0 0 0 1)
    4   (0 1 0 0)
           ↑   ↑
    
    上面的箭头指出了对应二进制位不同的位置。
    

    思路

    思路一:

    对两个数进行异或操作,位级表示不同的那一位为 1,统计有多少个 1 。

    思路二:

    使用 Integer.bitcount() 来统计 1 个的个数。

    思路三:

    使用 z&(z-1) 去除 z 位级表示最低的那一位。

    代码实现

    package BitManipulation;
    
    /**
     * 461. Hamming Distance(汉明距离)
     * 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
     * 给出两个整数 x 和 y,计算它们之间的汉明距离。
     */
    public class Solution461 {
        public static void main(String[] args) {
            Solution461 solution461 = new Solution461();
            int x = 1, y = 4;
            System.out.println(solution461.hammingDistance(x, y));
        }
    
        /**
         * 对两个数进行异或操作,位级表示不同的那一位为 1,统计有多少个 1 。
         *
         * @param x
         * @param y
         * @return
         */
        public int hammingDistance(int x, int y) {
            int z = x ^ y;
            int cnt = 0;
            while (z != 0) {
                if ((z & 1) == 1) {
                    cnt++;
                }
                z = z >> 1;
            }
            return cnt;
        }
    
        /**
         * 使用 Integer.bitcount() 来统计 1 个的个数。
         *
         * @param x
         * @param y
         * @return
         */
        public int hammingDistance_2(int x, int y) {
            return Integer.bitCount(x ^ y);
        }
    
        /**
         * 如果一个整数不为0,那么这个整数至少有一位是1。
         * 如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。
         * 其余所有位将不会受到影响。
         *
         * @param x
         * @param y
         * @return
         */
        public int hammingDistance_3(int x, int y) {
            int z = x ^ y;
            int cnt = 0;
            while (z != 0) {
                cnt++;
                z &= (z - 1);
            }
            return cnt;
        }
    }
    
    
  • 相关阅读:
    <script>元素
    女朋友问什么是动态规划,应该怎么回答?
    从输入URL到页面展示,这中间都发生了什么?
    TypeScript之父:JS不是竞争对手,曾在惧怕开源的微软文化中艰难求生
    Flash 终将谢幕:微软将于年底停止对 Flash 的支持
    尤雨溪:TypeScript不会取代JavaScript
    JVM参数设置、分析(转发)
    -XX:PermSize -XX:MaxPermSize 永久区参数设置
    堆的分配参数
    -Xmx 和 –Xms 设置最大堆和最小堆
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/9592947.html
Copyright © 2020-2023  润新知