461. Hamming Distance

/**
 * 461. Hamming Distance
 * 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.

Note:
0 ≤ x, y < 2的31次方.

Example:

Input: x = 1, y = 4
Output: 2

Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑   ↑

The above arrows point to positions where the corresponding bits are different.
 *
 * 我们先了解下位运算,包括:
 * & (与) : 1和1为1,其余为0;
 * | (或) : 有1为1,零零为0;
 * ^ (异或): 相同的为0,不同的为1;
 * ~ (取反): 按位取反;
 * >> (右移): 右移n位等于除于2的n次方;
 * << (左移): 左移n位等于乘于2的n次方;
 *
 * */
class Solution {
    fun hammingDistance(x: Int, y: Int): Int {
        val exc = x xor y
        //calculate the number of 1
        return exc.toString(2).count { it == '1' }
    }
}

class Solution2 {
    fun hammingDistance(x_: Int, y_: Int): Int {
        var result = 0
        var x = x_
        var y = y_
        while (x > 0 || y > 0) {
            result += (x xor y) and 1
            x = x shr 1 //除于2
            y = y shr 1
        }
        return result
    }
}


 
原文地址:https://www.cnblogs.com/johnnyzhao/p/12399452.html