Part Three 习题巧解 之 1. 判断奇偶数
Part Three 习题巧解 之 2. 两数交换
Part Three 习题巧解 之 3. 只出现一次的数字

4. 位1的个数

4.1 题目描述

leetcode-191. 位1的个数

4.2 思路讲解

思路讲解之前,请先思考一下除了一般做法的其他思路,尽量往位运算方面靠。

4.2.1 二进制

Part Three 习题巧解 之 4. 位1的个数

4.2.2 位运算

思路:循环判断n=n&(n-1)之后n是否为0,若不为0继续进行n=n&(n-1),并且计数加一,若为0停止循环。

Part Three 习题巧解 之 4. 位1的个数

原因:n与n-1的二进制的不同之处在于最右边的1(及其)后面的部分,最右边的1前面都是一样的进行了保留,最右边的1&0=0而且最右边的1后面的部分只能是0或者没有,0&0=0或者0&1=0使得最右边的1(及其)后面的部分都归0

4.2.2 总结

思路:此题需要掌握n与n-1的二进制的不同之处使得可以使用位运算解决此问题

位运算符的技巧:n&(n-1)消灭了最右边的1

4.3 代码实现

4.3.1 C语言

Part Three 习题巧解 之 4. 位1的个数

4.3.2 Java

Part Three 习题巧解 之 4. 位1的个数


5. 写在最后

系列解题文章已经第四篇了,你是否觉得与运算也有许多巧妙之处。希望看完这篇文档的你,能动手验证一下。纸上得来终觉浅,绝知此事要躬行。


6. 文档分享

如果您觉得这份关于位1的个数的文档还不错,尝试点击分享这份文档给好友吧!


作者 @MythicalCreature
于2020 年 08月 18日发布

相关文章:

  • 2021-08-24
  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
  • 2021-07-12
  • 2022-12-23
  • 2022-02-26
猜你喜欢
  • 2021-06-25
  • 2021-05-22
  • 2021-09-04
  • 2021-11-15
  • 2021-05-05
  • 2021-10-26
  • 2021-11-23
相关资源
相似解决方案