【LeetCode】0461——漢明距離

題目描述

在這裏插入圖片描述

解題思路

  本題我首先想到的就是通過異或找出二進制爲不同的,異或操作如下:對應位置相同結果爲0,對應位置不同則爲1

例如:

1 0 1 0
1 1 1 0 異或
-------------
0 1 0 0

  因此,本題首先要對兩個整數進行異或運算,然後再對異或的結果進行判斷,判斷1的個數,那麼問題就變爲,如何得到一個整數對應二進制數中的1的個數

  1. 首先我們將這個整數減去1,那麼原來處在整數最右邊的1就會變成0,原來在1後面的所有0都會變爲1,原來是1前面的不會變化

例如:1100,減去1之後就會變爲1011,我們發現,從右邊起第一個1變爲了0,後面的取反,前面的不變

  1. 然後我們用原來的整數和減去1之後的數做與運算,從原來整數第一個1的位置開始到最後都會變爲0

也就是說,把一個整數減去1,再和原來的整數做與運算,會把該整數最右邊的1變爲0

  1. 那麼一個整數的二進制有多少個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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章