iT邦幫忙

0

leetcode with python:191. Number of 1 Bits

題目:

Write a function that takes an unsigned integer and returns the number of '1' bits it has

給定32位的unsigned integer,回傳它裡頭有幾個1

我一開始想法很單純,用190.的方式
一個一個位數看是不是1,然後放計數器(反正也才32位XD)

class Solution:
    def hammingWeight(self, n: int) -> int:
        ans=0
        for i in range(32):
            if n&1:
                ans=ans+1
            n=n>>1
        return ans

最後執行時間32ms(faster than 91.95%)

後來我又想,既然只是單純的計數,為何不用count呢(逐漸被討論區感染

class Solution:
    def hammingWeight(self, n: int) -> int:
        return bin(n).count("1")

先將其變為二進位字串,算裡面的"1"就好
最後執行時間31ms(faster than 93.84%)

不過在我寫完逛討論區的時候,看到一個十分巧妙的解法
這邊分享一下,比敝人上面兩個沒營養的解法好多了

class Solution:
    def hammingWeight(self, n: int) -> int:
        ans=0
        while n:
            n=n&(n-1)
            ans=ans+1
        return ans

到n變為0為止,不斷和n-1做&運算,看總共執行了幾次
以1100為例,-1就是1011,兩者行&運算會變成1000
可以看到最尾端的1就這麼輕鬆被消掉了
只要知道消了幾次1,就知道該unsigned integer有幾個1了
最後執行時間31ms(faster than 93.84%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言