剑指Offer15-二进制中1的个数-easy

试题链接
题目描述: 请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2
例如输入:

输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。输入:11111111111111111111111111111101 输出:31 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

数据范围:
输入必须是长度为 32 的 二进制串 。

解题思路: n - 1 :二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1
n&(n - 1) : 二进制数字 n 最右边的 1 变成 0 ,其余不变。
【剑指Offer15-二进制中1的个数-easy】剑指Offer15-二进制中1的个数-easy
文章图片

算法流程:
1.初始化一个num = 0,代表最后结果
2.当n不为0的时候, 循环执行 n = n&(n-1),每次都把n对应二进制最右边的那个1消除掉。结果加一,num= num+1
AC代码(c++)
class Solution {public: int hammingWeight(uint32_t n) {int num = 0; while(n){num++; n&=(n-1); } return num; } };

    推荐阅读