Easy 461.漢明距離
因為原題目翻譯效果不佳,這裡是筆者自己的理解。
輸入兩個二進位制數 x、y,
輸出將 y 變為 x 所需改變的二進位制位數,成為漢明距離。
注意:
0 ≤ x, y < 2e31.
示例:
輸入: x = 1, y = 4
輸出: 2
解釋:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
補充「位運算」
符號 | 描述 | 運算規則 |
---|---|---|
& | 與 | 兩個位都為 1 時,結果才為 1 |
| | 或 | 兩個位都為 0 時,結果才為 0 |
^ | 異或 | 兩個位相同為 0,相異為 1 |
~ | 取反 | 0 變 1,1 變 0 |
<< | 左移 | 各二進位全部左移若干位,高位丟棄,低位補 0 |
>> | 右移 | 各二進位全部右移若干位,對無符號數,高位補 0,有符號數,各編譯器處理方法不一樣,有的補符號位(算術右移),有的補 0(邏輯右移) |
Java右移:
/**
* Java使用 >> 表示算術右移 補符號位
* >>> 表示邏輯右移 補0
*/
推導:
- 使用異或運算的性質 “相同為0 不同為1”
- 統計異或運算後的數有多少位 1
程式碼
class Solution {
public int hammingDistance(int x, int y) {
int result = 0 ;
int XOR = x ^ y;
while (XOR != 0) {
result += XOR & 1;
XOR >>>= 1;
}
return result;
}
}