15. 二进制中1的个数【位运算】
1. 问题
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
示例 2:
示例 3:
2. 解法① - 逐位判断
Java 移位运算符
<<:左移运算符,左移几位就补几个0。
>>:右移运算符(算术右移),如果数字为正数时,移位后在前面补0,为负数时,则在前面补1。
>>>:无符号右移运算符(逻辑右移),忽略符号,空位补0即可。
2.1 Java
3. 解法② - 使用n&(n−1)
3.1 Java
3.2 复杂度分析
时间复杂度:O(M)
n&(n−1)操作只有【减法】和【与】运算,占用O(1);设M为二进制数字n中1的个数,那么需要循环M次(每次消去一个1),所以是O(M)。
空间复杂度:O(1)
变量ans占用常数空间。
4. 参考
最后更新于