LeetCode 461 汉明距离

LeetCode 461 汉明距离

问题描述:
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。

统计两个数二进制位不同的个数
方法一: 对最低位不断取模

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36.6 MB, 在所有 Java 提交中击败了18.01%的用户

class Solution {
    public int hammingDistance(int x, int y) {
        int z = x^y;    //标记所有不同bit
        /*逐位统计1的数量*/
        int ans = 0;

        while(z!=0) {
            //取z的最低位
            if((z&1)==1) {
                ans++;
            }
            z = z>>1;
        }

        return ans;
    }
}

方法二: 不断去除最低位的1

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了40.32%的用户

class Solution {
    public int hammingDistance(int x, int y) {
        int z = x^y;    //标记所有不同bit
        /*逐位统计1的数量*/
        int ans = 0;

        while(z!=0) {
            ans++;
            z = z&(z-1);    //去除z最低位的1
        }

        return ans;
    }
}
原文地址:https://www.cnblogs.com/CodeSPA/p/13584731.html