Leetcode Note: Go - Hamming Distance
Hamming Distance - LeetCode
https://leetcode.com/problems/hamming-distance/
- Go 言語で取り組んだメモ
所感
- int x, y を 2進数 として Hamming distance を計算して、それらの距離を int として return する
- Hamming distance の計算方法
- int x, y を 2進数 に変換
- x, y を何文字変更したら同じ数値にできるか算出
- 例: x = 1, y = 4
- x = 1 = 0001, y = 4 = 0100 なので、同じ数値にするなら 2 bit の変更が必要
- 例: x = 3, y = 1
- x = 3 = 0011, y = 1 = 0001 なので、同じ数値にするなら 1 bit の変更が必要
Hamming distance - Wikipedia
https://en.wikipedia.org/wiki/Hamming_distance
ハミング距離 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E8%B7%9D%E9%9B%A2
回答
Go | 100 % Faster - LeetCode Discuss
https://leetcode.com/problems/hamming-distance/discuss/1819749/Go-or-100-Faster
func hammingDistance(x int, y int) int {
// Bitwise-XOR will give the number which have all the set bits for different corresponding btis
xor := x ^ y
r := 0
// Calculate the number of set bits
for xor != 0 {
xor -= xor & (-xor)
r++
}
return r
}
xor := x ^ y
で x と y の排他的論理和を取得- for loop で xor と -xor の論理積をカウントして return
x, y を 2進数 に変換してからどうのこうのではなくビット演算で実装できる