题目描述
题干:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
百度百科:
汉明重量是一串符号中非零符号的个数。因此它等同于同样长度的全零符号串的汉明距离。在最为常见的数据位符号串中,它是1的个数。
题解个数
和第190题一样的题型,一个是颠倒,一个是找出1的位数,按照原来的思路,把每一位通过与1相与得到,然后统计出1的个数
官方题解针对这道题给出了更优秀的一个思路,就是发现n与n-1两个数相与,会慢慢把自己的1消去,直到为0,大家可以动手验证一下
正确代码
public int hammingWeight(int n){
int ans = 0,flag = 1;
for (int i = 0; i < 32; i++) {
if ((n & flag) !=0){
ans++;
}
flag <<= 1;
}
return ans;
}
public int hammingWeight1(int n){
int ans = 0;
while (n != 0){
ans++;
n &= (n - 1);
}
return ans;
}
总结
简单题的位运算应该是都遵循着用位运算的特点出题,现在基本自己动手画一画试一试都可以解决,但是思路要开阔,每道题都有自己独特的解法
文章若是存在问题或者更好的题解,欢迎大佬评论区斧正和评论,各自努力,你我最高处见