1. 程式人生 > 其它 >LeetCode461 漢明距離

LeetCode461 漢明距離

方法

利用現有方法

利用Integer類自帶的計數方法

  • 時間複雜度:O(1)
  • 空間複雜度:O(1)
class Solution {
    public int hammingDistance(int x, int y) {
        return Integer.bitCount(x^y);
    }
}

位移法

首先將x和y進行異或,然後將異或結果依次左移一位,判斷最低位是否為1,以此計算1的個數

  • 時間複雜度:O(logC),C為數字的最大範圍,logC即為最大數字的二進位制位數
  • 空間複雜度:O(1)
class Solution {
    public int hammingDistance(int x, int y) {
        int res = 0;
        int n = x^y;
        while(n>0){
            if((n&1)==1){
                res++;
            }
            n = n>>1;
        }
        return res;
    }
}

Brian Kernighan演算法

Brian Kernighan演算法即數字n&n-1能夠去除最右側的1,先將x和y進行異或,然後再用Brian Kernighan演算法計算異或結果的1的個數

  • 時間複雜度:O(logC),C為數字的最大範圍,logC即為最大數字的二進位制位數
  • 空間複雜度:O(1)
class Solution {
    public int hammingDistance(int x, int y) {
        int res = 0;
        int n = x^y;
        while(n>0){
            n = n&n-1;
            res++;
        }
        return res;
    }
}