LeetCode.191.位1的个数

1.题目

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
方法一 
2.解题思路
审题之后先明确了题目的目的是计算输入的无符号整数中 ’1‘ 的个数,所以我第一个想到用数组去做,利用循环去挨个判断是否是 ’1‘ ,并进行累加得出个数。但是后来在编译过程中发生了错误所以尝试另外一种方法,看了评论以及相关提示发现要使用位运算。因此利用循环和位运算的右移以及按位与运算 ‘&’ 来实现代码进行对 ‘1’ 的个数累积。(此处对位运算的理解还需优化)
3.代码
int hammingWeight(uint32_t n) //无符号整数输入
{
int count = 0; for ( ; n != 0; n = n >> 1) //位运算右移
{ count
+= (n & 1);//&运算符的运用,n&1要么为1(n为奇数时,n的最低位为1),要么为0(n为偶数时,n的最低位为0)。
综上可得:n&1等效于 n%2==1 }
return count; }

 方法二:

2.解题思路

对于输入无符号整数可以考虑将输入的数字转换成自然整数然后进行除余数并且通过判断看余一就是有一个一,除为零则没有。随之累加得出一的个数。

3.代码

int hammingWeight(uint32_t n) 
   {
        int count=0;
        while(n>0)
        {
            if(n%2==1)
            {
                count++;
            }
            n/=2;
        }
        return count;
    }

 

posted on 2019-10-14 21:50  &+¥  阅读(143)  评论(0)    收藏  举报

导航