题目链接
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
n &= n-1的作用:消去n最低位的1。例子:当n=1010时,n-1=1001,此时n & n-1= 1000,达到了使二进制最低位的1变成0的效果。要想知道二进制中有多少个1,可以理解为要消去多少次最低位的1,记录次数即可。
n &= n-1
n & n-1= 1000
时间复杂度O(logn)
class Solution { public: int NumberOf1(int n) { int cnt = 0; while (n != 0) { n &= (n - 1); cnt++; } return cnt; } };