LeetCode461 漢明距離
阿新 • • 發佈:2021-06-18
方法
利用現有方法
利用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; } }