15-二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该二进制表示中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的个数。