题目:请实现一个函数,输入一个整数,输出该二进制表示中1的个数。
# 方法1
def num_of_1(n):
cnt = 0
flag = 1
while flag:
if n & flag:
cnt += 1
flag = flag << 1
return cnt
# 方法2
def num_of_1(n):
cnt = 0
while n:
cnt+=1
n = n&(n-1)
return cnt
注:
方法1:通过1左移的方式,依次与n进行&操作,即可计算出所有位中1的个数。时间复杂度为O(n),n为整数的二进制位数。
方法2:比较巧妙的做法,通过与(n-1)进行&操作,可以将n最后一位的1变为0,通过判断n最终为不为0判断1的个数。时间复杂度为O(m),m为1的个数。