二进制中1的个数
二进制中1的个数
http://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8
int NumberOf1(int n) { int cnt=0; for(int i=0;i<32;++i) { cnt+=n&1; n>>=1; } return cnt; }
将n于1相与,即判断最后一位是否为1,是1则计数为加1,不是加0;
判断完后n向右移1位,判断下一位是否为1;
输入为int类型,总共32位,所以for循环32次;
这样的好处在于不用区分负数和正数,因为只循环32次,没有理会左边补位1还是0.时间复杂度,空间复杂度均为O(1)。