思路:求两个数异或结果中1的个数。
和《剑指offer》中‘面试题10:二进制中1的个数’一样。
这里采用了书中优化后的解法。
思路如下:
1.把一个数减去1,就等于把最右边的1变成0,而这个1右边的所有0都变为1
2.把这个数和它减去1后的结果进行位与运算,结果是消掉最右边的1
3.判断步骤2中的结果是否为0,即所有的1是否被消掉。如果不为1,则重复步骤2
class Solution(object):
def hammingDistance(self, x, y):
n = x ^ y
cnt = 0
while(n) :
cnt+=1
n = (n - 1) & n
return cnt
这道题不难,一遍ac,但是用这种方法,两个数中有几位不一样就循环几次,不需要判断二进制的每一位。