难度:⭐
题目描述:
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例1:
1 | 输入:00000000000000000000000000001011 |
示例2:
1 | 输入:00000000000000000000000010000000 |
示例3:
1 | 输入:11111111111111111111111111111101 |
提示:
- 输入必须是长度为
32
的 二进制串 。
解题过程:
思路:
把整数转成二进制,统计各位相加的和,就是
c++代码:(执行用时0ms,击败100.00%,内存消耗6.2M,击败8.79%)
1 | class Solution { |
总结:
没有官方题解,不过题解里有一些好的思想,从位运算进行求解。
与运算逐位判断:
- 判断 n 最右一位是否为 1 ,根据结果计数。
- 将 n 右移一位,循环。
巧用n&(n-1):
- (n - 1) 解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。
- n \& (n - 1)解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。
多种解法解题效率差不多。