【leetcode】191. 位1的个数( Number of 1 Bits )


题目描述

【leetcode】191. 位1的个数( Number of 1 Bits )

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
进阶:
如果多次调用这个函数,你将如何优化你的算法?

在这里插入图片描述

第一次解答

思路1:
朴素的想法就是,挨个便利所有bits,计算个数。

思路2:
函数若会被调用多次,一个优化的方法就是,
建立一个256个元素的表,该表直接返回8bits对应的1的个数,
将输入分为若干各8bits,查询这个表就可以知道各个部分有几个1了。

思路3:
看官方题解的思路,n&(n-1)能把n最后一个"1"bits变为0。这里采用这种思路。

思路4:
别人贴出来的java中integer类的实现。看看这里的解法3

tsst case:
00000000000000000000000000001011
111111111111111111

class Solution {
public:
    int hammingWeight(uint32_t n) {
        // // 据说是java的integer类中的解法
        // n = n - ((n >> 1) & 0x55555555);
        // n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
        // n = (n + (n >> 4)) & 0x0f0f0f0f;
        // n = n + (n >> 8);
        // n = n + (n >> 16);
        // return n & 0x3f;

        int count = 0;
        while(n != 0){
            ++count;
            n &= n-1;
        }
        return count;
    }
};

结果:
在这里插入图片描述

相关/参考链接

官方题解
看看这里的解法3

发布了88 篇原创文章 · 获赞 61 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/a435262767/article/details/104149730