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;
}
LeetCode.191.位1的个数
原文:https://www.cnblogs.com/DCdc1230/p/11671267.html