LeetCode——191. 位1的个数(Java)

题目描述

题干:
  编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '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;
    }

总结

简单题的位运算应该是都遵循着用位运算的特点出题,现在基本自己动手画一画试一试都可以解决,但是思路要开阔,每道题都有自己独特的解法

文章若是存在问题或者更好的题解,欢迎大佬评论区斧正和评论,各自努力,你我最高处见
posted @ 2021-03-20 08:27  21岁还不是架构师  阅读(64)  评论(0编辑  收藏  举报