算法 - 計(jì)算漢明距離
1. 題目
給出兩個(gè)整數(shù) x 和 y,計(jì)算它們之間的漢明距離。
漢明距離是使用在數(shù)據(jù)傳輸差錯(cuò)控制編碼里面的,漢明距離是一個(gè)概念,它表示兩個(gè)(相同長(zhǎng)度)字對(duì)應(yīng)位不同的數(shù)量,我們以d(x,y)表示兩個(gè)字x,y之間的漢明距離。對(duì)兩個(gè)字符串進(jìn)行異或運(yùn)算,并統(tǒng)計(jì)結(jié)果為1的個(gè)數(shù),那么這個(gè)數(shù)就是漢明距離。
示例:
- 輸入: x = 1, y = 8
- 輸出: 2
- 解釋:
1 (0 0 0 1)
8 (1 0 0 0)
↑ ↑
上面的箭頭指出了對(duì)應(yīng)二進(jìn)制位不同的位置。
2. 代碼
2.1. C#
public class Solution {
public int HammingDistance(int x, int y) {
var n = x ^ y;
// 計(jì)算1的個(gè)數(shù)
var counter = 0;
while(n>0){
n = n & (n-1);
counter ++;
}
return counter;
}
}
2.2. Javascript
var hammingDistance = function(x, y) {
let n = x^y;
let counter = 0;
while(n){
counter ++;
n = n & (n-1);
}
return counter;
};
3. 另:計(jì)算二進(jìn)制數(shù)字中1的個(gè)數(shù)
一個(gè)整數(shù)減去1,再和原整數(shù)做與運(yùn)算,會(huì)把該整數(shù)最右邊一個(gè)1變成0。
因此,一個(gè)整數(shù)的二進(jìn)制有多少個(gè)1,就可以進(jìn)行多少次這樣的操作。
let counter = 0;
while(n){
counter ++;
n = n & (n-1);
}
浙公網(wǎng)安備 33010602011771號(hào)