leetcode 剑指offer 15 二进制中 1 的个数

给出一个巧妙方法,可以消去二进制数最右边的1
而不用每次判断最后一位然后除以2,这个方法时间复杂度 \(O(log_2 n)\) 空间 \(O(1)\)
巧妙方法可以实现,时间复杂度\(O(M)\),M为二进制数中1的个数
 

巧用 \(n \& (n - 1)\)

  • \((n - 1)\)解析: 二进制数字 n最右边的 1 变成 0 ,此 1右边的 0 都变成 1 。
  • \(n \& (n - 1)\)解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。

posted @ 2020-04-02 12:34  种树人  阅读(123)  评论(0编辑  收藏  举报