题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
先来复习一下位操作的相关知识。http://blog.sina.com.cn/s/blog_618199e60100ka5b.html
class Solution {
public:
int NumberOf1(int n) {
int c=0;
for(c;n;c++) {
n&=(n-1);//清除最低位的1,清除几次,就说明有几个1
}
return c;
}
};
思路二: 但是超时。
class Solution {
public:
int NumberOf1(int n) {
unsigned int c=0;
for(c;n;n>>1) {
c+=n&1;
}
return c;
}
};
思路三:
class Solution {
public:
int NumberOf1(int n) {
std::bitset<32> s(n);
return s.count();
}
};
拥抱明天!
不给自己做枷锁去限制自己。
别让时代的悲哀,成为你人生的悲哀。

浙公网安备 33010602011771号