題目描述
解題思路
本題我首先想到的就是通過異或找出二進制爲不同的,異或操作如下:對應位置相同結果爲0,對應位置不同則爲1
例如:
1 0 1 0
1 1 1 0 異或
-------------
0 1 0 0
因此,本題首先要對兩個整數進行異或運算
,然後再對異或的結果進行判斷,判斷1的個數,那麼問題就變爲,如何得到一個整數對應二進制數中的1的個數
- 首先我們將這個整數
減去1
,那麼原來處在整數最右邊的1就會變成0,原來在1後面的所有0都會變爲1,原來是1前面的不會變化
例如:1100,減去1之後就會變爲1011,我們發現,從右邊起第一個1變爲了0,後面的取反,前面的不變
- 然後我們用原來的整數和減去1之後的數做
與運算
,從原來整數第一個1的位置開始到最後都會變爲0
也就是說,把一個整數減去1,再和原來的整數做與運算,會把該整數最右邊的1變爲0
- 那麼一個整數的二進制有多少個1,就可以進行多少次這樣的操作
Java
代碼
class Solution {
public int hammingDistance(int x, int y) {
//異或
int tmp = x ^ y;
//計數
int count = 0;
while (tmp > 0) { //如果該數大於0
count++; //計數+1
tmp = tmp & (tmp - 1); //更新tmp值,原整數與(原整數-1)做與運算
}
return count;
}
}
Python3
代碼
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
tmp = x ^ y
count = 0
while tmp != 0:
count += 1
tmp = tmp & (tmp - 1)
return count
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
return bin(x ^ y).count('1')
C++
代碼
class Solution {
public:
int hammingDistance(int x, int y) {
int tmp = x ^ y;
int count = 0;
while(tmp > 0){
count++;
tmp = tmp & (tmp - 1);
}
return count;
}
};