191. Number of 1 Bits
題目網址:https://leetcode.cn/problems/number-of-1-bits/
題意:給一無號整數
n
, 返回其二進制表示中1
的個數。進階:如果多次呼叫此 function, 要如何優化?
Solution 1:
想法:每次判斷
n
的最右 bit 是否為1
, 若是的話, 則cnt++
, 判斷完最右 bit 後將n
右移一位, 重複以上步驟直到n == 0
(沒有 1-bit)為止
class Solution { |
- time:$O(1)$ ➔ 因為
n
只有32
bit, 所以最多右移32
次, 故為 $O(32)$ - space:$O(1)$ ➔ 只需常數空間
Solution 2:
想法:
n & (n-1)
會讓n
最右邊的1
變為0
(重要), 每做一次cnt++
, 直到n == 0
為止e.g.
n = 100
e.g.
n = 101
class Solution { |
- time:$O(1)$ ➔ 因為
n
只有32
bit, 所以最多右移32
次, 故為 $O(32)$ - space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論