力扣打卡:1的个数:191
解题思路
得到的提示,学习的技巧:一个数与上这个数减1,能将这个数的最后一个1去掉
学习链接
理解:
一个数n,当其减1时,会将二进制形式后的最后一个1变为0,最后一个1后面的0全部变为1,注意这里指的是最后一个1,不是说一定是最后一个数
当n与n-1相与时,就会将n的最后最后一个1去掉,其余部分不变,
因为n-1的二进制形式是n的二进制形式中最后一个1变为0,最后一个后面的0全部变为1,
所以n与上n-1就能将n的二进制形式的最后一个1去掉,其余部分不变
同时还有一种学习的技巧是位运算以及&1的技巧
常见的&1技巧是判断这个数是否为偶数,因为通过最后一个二进制位来判断,&1为0,那么为偶数,反之则为奇数
那么可以通过n的位移,将n的每一个二进制位都去&1,就能得到1的个数
代码
class Solution:
def hammingWeight(self, n: int) -> int:
# 学习到了一个数与上这个数减一,能将二进制的最后一个1去掉
count = 0
while n:
n &= (n-1)
count+=1
return count
class Solution:
def hammingWeight(self,n:ing) -> int:
count = 0
while n:
if n & 1:
count+=1
n >>= 1
总结:
一个数与上这个数减1,能将这个数二进制的最后一个1去掉
一个数可以通过&1来判断奇偶数,因为&1可以将这个数的最后一个二进制数拿到,如果为0则为偶数,反之,则为奇数。