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 ,其余不变。

猜你喜欢

转载自www.cnblogs.com/islch/p/12618901.html