461. Hamming Distance [Easy]

https://leetcode.com/problems/hamming-distance/description/

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.

想速度摸一题Easy题睡觉的,结果还是调试了几次。。
第一,比较的顺序是从前往后还是从后往前要想清楚。第二,charAt又忘记加单引号了' '。

    public int hammingDistance(int x, int y) {
        String xs = Integer.toBinaryString(x);
        String ys = Integer.toBinaryString(y);
        int count = 0;
        for (int i = 0 ; i < Math.min(xs.length(), ys.length()); i++) {
            if (xs.charAt(xs.length() - 1- i) != ys.charAt(ys.length()-1  - i)) {
                count++;
            }
        }
        String targetS = xs.length() > ys.length() ? xs : ys;
        for (int j = 0 ; j < targetS.length() - Math.min(xs.length() , ys.length()); j++) {
            if (targetS.charAt(j) != '0') {
                count++;
            }
        }
        return count;
    }

1 line solution

https://discuss.leetcode.com/topic/72093/java-1-line-solution-d:

What does come to your mind first when you see this sentence "corresponding bits are different"? Yes, XOR! Also, do not forget there is a decent function Java provided: Integer.bitCount() ~~~

public class Solution {
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x ^ y);
    }
}

3 line solution,值得看看位运算

http://blog.csdn.net/xiaochunyong/article/details/7748713

public int hammingDistance(int x, int y) {
    int xor = x ^ y, count = 0;
    for (int i=0;i<32;i++) count += (xor >> i) & 1;
    return count;
}

x ^ y的意思是按位异或,也就是说把它们不同的bit变为1,相同的变成0。然后每次右移1位,与1相与,计算1的个数。用到了异或,右移和与运算,不错的训练。

你可能感兴趣的:(461. Hamming Distance [Easy])