https://leetcode.com/problems/hamming-distance/
將兩個二進制數比較,輸出不同位數的個數
Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑
解題思路:
此題考察的是知識點是運算符,特別是異或運算符^
異或運算符作用為“相同出0,不同出1”,這個特性正好可以用來解題
那么正常的思路就是將x,y兩數進行異或運算,然后統計1的出現次數
解法(Python):
1 class Solution(object): 2 def hammingDistance(self, x, y): 3 return bin(x^y).count("1");
這個解法其實很low的,首先用了bin()函數,作用是將異或結果二進制化為字符串,然后利用字符串函數count統計1出現的次數並輸出
優秀解法評析(Java):
1 public int hammingDistance(int x, int y) { 2 int xor = x ^ y, count = 0; 3 for (int i=0;i<32;i++) count += (xor >> i) & 1; 4 return count; 5 }
由於題目有限制0 ≤ x
, y
< 231
所以這個解法將異或結果一個個移位,然后和1和運算,自然相同為1,不同為0,然后用count器加上這個相同的1自然就是“1出現的次數”