LeetCode:求兩個整數的漢明距離
阿新 • • 發佈:2019-02-19
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.
該題即求兩個整數的漢明距離,比如輸入x=1, y=4, 則x的二進位制表示為001,而y的二進位制表示為100,而兩個整數漢明距離的定義則是這兩個整數的二進位制表示中,不同的二進位制位的個數,即在上面的例子中,由於001和100有2位不同,則它們之間的漢明距離為2。
解法一:簡單粗暴法
將兩個整數分別轉成二進位制,再分別比較每一位,若當前位不同,則距離加1,再比較接下來的一位。這種方法需要遍歷二進位制數中的所有位。
解法二:使用異或和n&(n-1)技巧
對兩個二進位制數進行異或,得到的結果中某位為1,則對應的原來兩個數中該位是不同的。
而使用n&(n-1)可以使得n的二進位制數表示中最後一位1變成0。例如n=110, n-1=101, 則n&(n-1)=100。
綜上,可以對兩個數進行異或之後使用n&(n-1)技巧計算不同的位數。這種方法無需遍歷二進位制數中的所有位, 只比較不同的位。
程式碼如下:
class Solution { public: int hammingDistance(int x, int y) { int z = x^y; int count = 0; while(z){ ++ count; z &= z-1; } //cout << z << endl; return count; } };