15.二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。
分析
方法一:按位判断
依次判断每一位是否为1,采用左移<<的方法,
尽量规避让原数字右移动,有符号位的问题,可能会陷入死循环。:
左移就是:丢弃最高位,0补最低位
判断第1位:让n与1相与;结果为1 ,说明该位为1,结果为0,说明该位为0;
判断第2位:让1左移1位,再和n相与 :1<<1;
判断第3位:让1左移2位,再和n相与:1<<2;
…
判断第32位:让1左移31位,再和n相与1<<31;
时间复杂度 O(1), 空间复杂度 O(1)
class Solution {
public:
int hammingWeight(uint32_t n) {
int ret=0;
for(int i=0;i<32;i++)
{
if(n & (1<<i))
ret++;
}
return ret;