题目来源:剑指offer(第二版)15.
链接:https://leetcode.cn/problem-list/xb9nqhhg/
题目描述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量))。
解题思路:题目比较简单。
- 暴力求解法循环取末位数并计数
- n和n-1相与之后能够将n的末位置0;这样通过判断n和n-1相与结果和n-1是否相等就可以得到n
的末位是否为1.
代码:
1.循环取末位数:
class Solution {
public:
int hammingWeight(uint32_t n) {
// 循环取余
int num = 0;
while(n)
{
int x = n % 2;
if(x) num++;
n = n / 2;
}
return num;
};
2.n和n-1相与
class Solution {
public:
int hammingWeight(uint32_t n) {
//与n-1相与
int num = 0;
while(n)
{
if((n & n-1) == n-1) num++;
n = n / 2;
}
return num;
}
};