1. 程式人生 > >leetcode-461 Hamming Distance

leetcode-461 Hamming Distance

  1. 英文

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑

The above arrows point to positions where the corresponding bits are different.

  1. 中文

漢明距離:任意兩個整數,轉換為二進位制,計算相同位數中,不相同數字的數量,即同一位置,一個位0,一個位1,那麼這就是相同位數數字不相同,距離加1
3. 說明
因為是計算相同位數數字不相同的個數,想到了位運算的^(異或運算)運算,兩者不相同為1,這樣兩個整數進行異或運算後,不相同的位數都是1,那麼就轉換為求一個數的二進位制中1的個數
4. java程式碼

public class HammingDistance {
    public static void main(String[] args) {
        System.out.println(hammingDistance(1,4));
    }
    public static int hammingDistance(int x,int y){
        int distance=0;
        int temp = x^y;
        while(temp>0){
            if((temp^1)<temp){
                distance++;
            }
            temp >>=1
; } return distance; } }

上述程式碼:兩個整數異或運算後,通過與1再次異或,因為1與1進行異或運算後為0,因此與1的異或運算值小於原值,通過這樣判斷1的個數。後來通過查詢獲取更優的運算,程式碼如下:

public class HammingDistance {
    public static void main(String[] args) {
        System.out.println(hammingDistance2(1,4));
    }
    public static int hammingDistance2
(int x,int y){ int distance=0; int temp = x^y; int count=0; while(temp>0){ distance++; temp &= (temp - 1); count++; } System.out.println("2:"+count); return distance; } }

程式碼說明:方法一中,需要每個位數都需要判斷,而方法二中位的跨度比較大,只比較為1的位數,減少了比較次數
5. 備註
如果有更優的計算方法,請留言