/**
* 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
}
}