將兩個(gè)二進(jìn)制數(shù)比較,輸出不同位數(shù)的個(gè)數(shù)
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
解題思路:
此題考察的是知識(shí)點(diǎn)是運(yùn)算符,特別是異或運(yùn)算符^
異或運(yùn)算符作用為“相同出0,不同出1”,這個(gè)特性正好可以用來(lái)解題
那么正常的思路就是將x,y兩數(shù)進(jìn)行異或運(yùn)算,然后統(tǒng)計(jì)1的出現(xiàn)次數(shù)
解法(Python):
1 class Solution(object):
2 def hammingDistance(self, x, y):
3 return bin(x^y).count("1");
這個(gè)解法其實(shí)很low的,首先用了bin()函數(shù),作用是將異或結(jié)果二進(jìn)制化為字符串,然后利用字符串函數(shù)count統(tǒng)計(jì)1出現(xiàn)的次數(shù)并輸出
優(yōu)秀解法評(píng)析(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
所以這個(gè)解法將異或結(jié)果一個(gè)個(gè)移位,然后和1和運(yùn)算,自然相同為1,不同為0,然后用count器加上這個(gè)相同的1自然就是“1出現(xiàn)的次數(shù)”