題目:
兩個整數之間的漢明距離指的是這兩個數字對應二進制位不同的位置的數目。
給出兩個整數 x 和 y,計算它們之間的漢明距離。
注意:
0 ≤ x, y < 231.
示例:
輸入: x = 1, y = 4
輸出: 2
解釋:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭頭指出了對應二進制位不同的位置。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/hamming-distance
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路:
^運算符:異或,當二進制串中對應數不相等,返回1.
結果:所以異或之後的二進制串中1的個數即是結果。
方法:可以使用除以2倒取餘數的方法,也可以使用繼續使用異或^等方法。
這裏使用的是異或方法。
要計算1的個數,可以採用s&(s-1)的方法。
例子:
輸入:16 8
輸出:2
16:10000 8 :01000
16^8=11000=s
sum=1,s&s-1=11000&10111=10000
sum=2,s&s-1=10000&01111=0
每次減1,因爲是從高位1減去,所以轉化爲低位1,前一位爲0,在&的過程中就去掉了該位。
sum變相計算了1的個數。
c++代碼:
class Solution {
public:
int hammingDistance(int x, int y) {
int s=x^y;//異或
int sum=0;
while(s)
{
sum++;//加一
s=s&(s-1);//逐位相與
}
return sum;
}
};
或者:
while(s)
{
if(s&1)
sum++;//加一
}
s>>=1;