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;
    }
    }