Hamming Distance Problem# Problem# The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, return the Hamming distance between them .
Examples# Example 1:
1
2
3
4
5
6
7
8
9
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.
Example 2:
1
2
3
4
Input:
x = 3, y = 1
Output:
1
Constraints:
Solution# Method 1 – Bitwise XOR and Counting# Intuition# The Hamming distance between two integers is the number of positions at which the corresponding bits are different. By taking the XOR of the two numbers, we get a number whose set bits represent differing positions. Counting these set bits gives the Hamming distance.
Approach# Compute the XOR of x and y. Count the number of set bits in the result. Return the count as the Hamming distance. Code#
Java
Cpp
Go
Python
Rust
Typescript
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int hammingDistance (int x, int y) {
int xor = x ^ y;
int ans = 0;
while (xor != 0) {
ans += xor & 1;
xor >>= 1;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public :
int hammingDistance(int x, int y) {
int xorv = x ^ y, ans = 0 ;
while (xorv) {
ans += xorv & 1 ;
xorv >>= 1 ;
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
func hammingDistance (x int , y int ) int {
xor := x ^ y
ans := 0
for xor != 0 {
ans += xor & 1
xor >>= 1
}
return ans
}
1
2
3
4
5
6
7
8
class Solution :
def hammingDistance (self, x: int, y: int) -> int:
xor = x ^ y
ans = 0
while xor:
ans += xor & 1
xor >>= 1
return ans
1
2
3
4
5
6
7
8
9
10
11
impl Solution {
pub fn hamming_distance (x: i32 , y: i32 ) -> i32 {
let mut xor = x ^ y;
let mut ans = 0 ;
while xor != 0 {
ans += xor & 1 ;
xor >>= 1 ;
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
class Solution {
hammingDistance (x : number , y : number ): number {
let xor = x ^ y , ans = 0 ;
while (xor !== 0 ) {
ans += xor & 1 ;
xor >>= 1 ;
}
return ans ;
}
}
Complexity# ⏰ Time complexity: O(1), since the number of bits is fixed (32). 🧺 Space complexity: O(1), only a few variables are used. Method 2 – Bitwise XOR and Brian Kernighan’s Algorithm# Intuition# Brian Kernighan’s algorithm efficiently counts the number of set bits by repeatedly clearing the lowest set bit. This reduces the number of iterations to the number of set bits.
Approach# Compute the XOR of x and y. While the result is not zero, increment the count and clear the lowest set bit. Return the count. Code#
Java
Cpp
Go
Python
Rust
Typescript
1
2
3
4
5
6
7
8
9
10
class Solution {
public int hammingDistance (int x, int y) {
int xor = x ^ y, ans = 0;
while (xor != 0) {
ans++ ;
xor &= xor - 1;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public :
int hammingDistance(int x, int y) {
int xorv = x ^ y, ans = 0 ;
while (xorv) {
ans++ ;
xorv &= xorv - 1 ;
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
func hammingDistance (x int , y int ) int {
xor := x ^ y
ans := 0
for xor != 0 {
ans ++
xor &= xor - 1
}
return ans
}
1
2
3
4
5
6
7
8
class Solution :
def hammingDistance (self, x: int, y: int) -> int:
xor = x ^ y
ans = 0
while xor:
ans += 1
xor &= xor - 1
return ans
1
2
3
4
5
6
7
8
9
10
11
impl Solution {
pub fn hamming_distance (x: i32 , y: i32 ) -> i32 {
let mut xor = x ^ y;
let mut ans = 0 ;
while xor != 0 {
ans += 1 ;
xor &= xor - 1 ;
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
class Solution {
hammingDistance (x : number , y : number ): number {
let xor = x ^ y , ans = 0 ;
while (xor !== 0 ) {
ans ++ ;
xor &= xor - 1 ;
}
return ans ;
}
}
Complexity# ⏰ Time complexity: O(1), since the number of bits is fixed (32). 🧺 Space complexity: O(1), only a few variables are used.