leetcode 461 Hamming Distance
阿新 • • 發佈:2018-11-26
題目:求兩個整數x,y的海明碼的距離。
思路:
- 把數字變成海明碼
- 根據兩個陣列計算海明碼的不同的個數
程式碼:
public int hammingDistance(int x, int y) { ArrayList<Double> xx = new ArrayList<>(); while(x!=0){ double position = Math.floor(Math.log(x)/Math.log(2)); x = x - (int)Math.pow(2,position); xx.add(position); } while(y!=0){ double position2 = Math.floor(Math.log(y)/Math.log(2)); y = y - (int)Math.pow(2,position2); if(xx.contains(position2)) xx.remove(position2); else xx.add(position2); } // System.out.println(xx.size()); return xx.size(); }
改進思路:
- 兩個二進位制數進行異或。
- 使用n&(n-1)可以使得n的二進位制數表示中最後一位1變成0。可以對兩個數進行異或之後使用n&(n-1)技巧計算不同的位數
class Solution { public: int hammingDistance(int x, int y) { int z = x^y; int count = 0; while(z){ ++ count; z &= z-1; } //cout << z << endl; return count; } };