二進位操作 計算bit1的數目 Number of 1 Bits_Leetcode #191

閱讀時間約 4 分鐘

題目敘述

題目會給我們一個整數,要求我們計算出這個整數的二進位表示法裡面,有幾個bit1?

例如 5 = 二進位的 101 => 有2個 bit1,答案為2

英文版的題目敘述在這裡


測試範例

Example 1:

Input: n = 00000000000000000000000000001011
Output: 3
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.

Example 2:

Input: n = 00000000000000000000000010000000
Output: 1
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.

Example 3:

Input: n = 11111111111111111111111111111101
Output: 31
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.

 


約束條件

Constraints:

  • The input must be a binary string of length 32.

 

Follow up: If this function is called many times, how would you optimize it?


演算法

可以透過向右平移和LSB檢查來實現一個高效能的線性時間演算法。

可以想像LSB上頭有一個探針每讀到1個bit1,計數器就累加1,就著再向右平移一次,總共迭代、遞迴32次,最終的計數器累計值就是答案,也就是bit1 的總數。


程式碼 遞迴版本

class Solution:

 def hammingWeight(self, n: int) -> int:
  
  # Base case
  if n == 0 :
   return 0
  
  # General case:
  # hammingWeight(n)
  # = hammingWeight(n / 2) + LSB
  # = hammingWeight(n / 2) + odd bit
  # = hammingWeight(n / 2) + ( n & 1)
  
  # Python's right shift operator is >>
  return (n & 1) + self.hammingWeight( n >> 1 )

複雜度分析

時間複雜度: O(32) = O(1)

線性掃描,從右到左掃描每個bit,總共耗時O(32) = O(1) = 常數級別


空間複雜度: O(32) = O(1)

從右到左掃描每個bit,遞迴深度為O(32) = O(1) = 常數級別


程式碼 迭代版本

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

時間複雜度: O(32) = O(1)

線性掃描,從右到左掃描每個bit,總共耗時O(32) = O(1) = 常數級別


空間複雜度: O(32) = O(1)

從右到左掃描每個bit,迭代長度為O(32) = O(1) = 常數級別


額外補充,Python 在3.10後的版本,提供內建函數,可以直接返回bit 1 count

(若在面試 上機考時,

仍然建議先寫出上方遞迴法或迭代法的演算法,來展現二進位操作的知識與能力)

class Solution:   
 def hammingWeight(self, n: int) -> int:
  
  return n.bit_count()

關鍵知識點

從二進位的規律,想到用平移bitwiseAND 來計算一個二進位表示法裡面有幾個bit 1


Reference:

[1] Python/JS/Java/Go/C++ O( lg n ) by bit-manipulation - Number of 1 Bits - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們一張Products資料表,裡面分別有product_id、low_fats、recyclable等欄位,其中product_id 是主鍵Primary Key。 要求我們列出所有的可回收 且 低脂產品的product_id,順序不拘。
題目敘述 題目會給我們一個corridor陣列,裡面代表盆栽和座位的分布,P代表Plant盆栽,S代表Seat座位。要求我們依照佈置規則放置隔板,計算總共有幾個合法的隔板分割方法數? 規則: 每兩個座位視為一組,每兩組之間的盆栽所產生的空位,皆可放置一片隔板。 每一組分割內必須恰好包含兩個座位
題目敘述 題目會給定一組數字鍵盤,要求我們每次撥號的時候都走象棋的"馬"步,也就是日字型的走法,請問給定長度的n的數字撥號方式有幾種? 最後回傳答案之前,記得對109 + 7做除法取餘數。 詳細的題目可在這裡看到 數字鍵盤的配置如下圖 象棋的"馬"步 日字型走法 示意圖
題目會給我們一個陣列nums,要求我們以每個陣列元素分別當作軸心點,計算差值的絕對值總和,最後以陣列的形式,返回答案。 測試範例 Example 1: Input: nums = [2,3,5] Output: [4,3,5]
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
題目會給我們一張Products資料表,裡面分別有product_id、low_fats、recyclable等欄位,其中product_id 是主鍵Primary Key。 要求我們列出所有的可回收 且 低脂產品的product_id,順序不拘。
題目敘述 題目會給我們一個corridor陣列,裡面代表盆栽和座位的分布,P代表Plant盆栽,S代表Seat座位。要求我們依照佈置規則放置隔板,計算總共有幾個合法的隔板分割方法數? 規則: 每兩個座位視為一組,每兩組之間的盆栽所產生的空位,皆可放置一片隔板。 每一組分割內必須恰好包含兩個座位
題目敘述 題目會給定一組數字鍵盤,要求我們每次撥號的時候都走象棋的"馬"步,也就是日字型的走法,請問給定長度的n的數字撥號方式有幾種? 最後回傳答案之前,記得對109 + 7做除法取餘數。 詳細的題目可在這裡看到 數字鍵盤的配置如下圖 象棋的"馬"步 日字型走法 示意圖
題目會給我們一個陣列nums,要求我們以每個陣列元素分別當作軸心點,計算差值的絕對值總和,最後以陣列的形式,返回答案。 測試範例 Example 1: Input: nums = [2,3,5] Output: [4,3,5]
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
如果真的要為易經找出一個哲學性定位,個人認為那或許是,比起分析世界,更在意於探討人與世界之間的關係與位置,這是深藏內部的涵義
Thumbnail
Mengrai建立之蘭納王國控制泰國清邁一帶,勢力一度達到中國西雙版納傣族自治州,與拓地西南的元朝因爭奪今景洪市交惡,遭元朝於1301年遣劉深率大軍征討被其稱為「八百媳婦國」的蘭納,但大軍所及,軍需徵調徭役導致雲南少數民族不滿,紛起聯合反抗,加上不適熱帶叢林,於1302年蒙古兵鋒未至蘭納便被迫撤軍。
Thumbnail
昨天CBA常規賽各大獎項都陸續公佈,先把結果給大家看看。 一陣:王哲林、張鎮麟、吳前、趙繼偉、賀希寧 二陣:徐傑、孫銘徽、崔永熙、易建聯、劉澤一 外援最佳陣容:馬尚、瓊斯、薩林杰、弗格、布萊克尼 單項獎:MVP:王哲林(生涯第二次);最佳星銳球員:崔永熙;最佳主帥:王世龍;最佳防守球員:沈梓捷
Thumbnail
很多新人會問,一進的時候有爸爸牽手走紅毯跟花童灑花,那婚禮二次進場到底還能做些什麼呢?超怕冷場的啦~別擔心,OKOH來告訴你,不擔心冷場的幾種二進方式,快看過來吧
Thumbnail
父母要求,男女雙方分開辦,女方辦訂婚+歸寧,男方則是結婚。 婚宴場地由我爸媽決定,最後選擇台南商務會館,除了宴客,會館也提供同一場地的舞台給我們進行儀式,並準備奉茶等瑣事。 我們的媒人婆請專業媒人婆來,給予需求和時間後,由他來排行程
Thumbnail
9月21日,俄羅斯總統普京(Vladimir Putin,又譯作普丁、蒲亭或蒲廷)發表面向全國的公開電視講話,宣佈即日起在俄羅斯聯邦境內進行部分動員。據路透社表示,這是俄羅斯在二戰後的首次動員,阿富汗戰爭、車臣戰爭時都未曾有過。
Thumbnail
小吉市場的空間小小的,給人的印象卻非常寬敞而溫暖。餐點的選項不多但讓人滿足,或許令人開心的事物不需要太複雜澎湃,優格香料咖哩、咖啡、烤布丁、用心的餐點很簡單也不簡單!
Thumbnail
書名:選三哲學    聚焦3件事,解決工作生活兩難,搞定你的超載人生 作者:蘭蒂‧祖克柏 書版社:遠流     蘭蒂‧祖克柏說,人生有五大面向,工作、睡眠、家庭、運動和朋友。 照顧自己的健康,包含身體及心理的適應力,好的情緒表達、專注、壓力管理以及有益健康的飲食,這些,蘭蒂都放在「運動」面向裡,這樣
Thumbnail
​ 走一趟新北市新莊區中正路,這一條有新莊廟街之稱街道。彷彿時間流盪走進清朝時光隧道內。如果說是新莊區最密集廟宇駐利街道,到不如說是先民遺跡之地。這一條廟街廟宇很多,古蹟也不少。這篇來介紹新北市定古蹟文昌祠。 新北市新莊區文昌祠相關資訊: ​​ ​​ 新北市新莊區碧江街20號 ​​ ​​ 0
心悅生醫,是我第一次買生技股。以目前來說他沒有營收,就沒有EPS,所以所謂的財報變成了沒有參考性。 唯一可以看到只有他在產品的研究進度,而這也是我看他未來的可能性。 其實生技不是我的拿手,講的白一點,我始終不得其門而入,就像一直卡在新手村的人,而且還沒有看到前方的路。 心悅生醫的產品,我覺得可以分三
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
如果真的要為易經找出一個哲學性定位,個人認為那或許是,比起分析世界,更在意於探討人與世界之間的關係與位置,這是深藏內部的涵義
Thumbnail
Mengrai建立之蘭納王國控制泰國清邁一帶,勢力一度達到中國西雙版納傣族自治州,與拓地西南的元朝因爭奪今景洪市交惡,遭元朝於1301年遣劉深率大軍征討被其稱為「八百媳婦國」的蘭納,但大軍所及,軍需徵調徭役導致雲南少數民族不滿,紛起聯合反抗,加上不適熱帶叢林,於1302年蒙古兵鋒未至蘭納便被迫撤軍。
Thumbnail
昨天CBA常規賽各大獎項都陸續公佈,先把結果給大家看看。 一陣:王哲林、張鎮麟、吳前、趙繼偉、賀希寧 二陣:徐傑、孫銘徽、崔永熙、易建聯、劉澤一 外援最佳陣容:馬尚、瓊斯、薩林杰、弗格、布萊克尼 單項獎:MVP:王哲林(生涯第二次);最佳星銳球員:崔永熙;最佳主帥:王世龍;最佳防守球員:沈梓捷
Thumbnail
很多新人會問,一進的時候有爸爸牽手走紅毯跟花童灑花,那婚禮二次進場到底還能做些什麼呢?超怕冷場的啦~別擔心,OKOH來告訴你,不擔心冷場的幾種二進方式,快看過來吧
Thumbnail
父母要求,男女雙方分開辦,女方辦訂婚+歸寧,男方則是結婚。 婚宴場地由我爸媽決定,最後選擇台南商務會館,除了宴客,會館也提供同一場地的舞台給我們進行儀式,並準備奉茶等瑣事。 我們的媒人婆請專業媒人婆來,給予需求和時間後,由他來排行程
Thumbnail
9月21日,俄羅斯總統普京(Vladimir Putin,又譯作普丁、蒲亭或蒲廷)發表面向全國的公開電視講話,宣佈即日起在俄羅斯聯邦境內進行部分動員。據路透社表示,這是俄羅斯在二戰後的首次動員,阿富汗戰爭、車臣戰爭時都未曾有過。
Thumbnail
小吉市場的空間小小的,給人的印象卻非常寬敞而溫暖。餐點的選項不多但讓人滿足,或許令人開心的事物不需要太複雜澎湃,優格香料咖哩、咖啡、烤布丁、用心的餐點很簡單也不簡單!
Thumbnail
書名:選三哲學    聚焦3件事,解決工作生活兩難,搞定你的超載人生 作者:蘭蒂‧祖克柏 書版社:遠流     蘭蒂‧祖克柏說,人生有五大面向,工作、睡眠、家庭、運動和朋友。 照顧自己的健康,包含身體及心理的適應力,好的情緒表達、專注、壓力管理以及有益健康的飲食,這些,蘭蒂都放在「運動」面向裡,這樣
Thumbnail
​ 走一趟新北市新莊區中正路,這一條有新莊廟街之稱街道。彷彿時間流盪走進清朝時光隧道內。如果說是新莊區最密集廟宇駐利街道,到不如說是先民遺跡之地。這一條廟街廟宇很多,古蹟也不少。這篇來介紹新北市定古蹟文昌祠。 新北市新莊區文昌祠相關資訊: ​​ ​​ 新北市新莊區碧江街20號 ​​ ​​ 0
心悅生醫,是我第一次買生技股。以目前來說他沒有營收,就沒有EPS,所以所謂的財報變成了沒有參考性。 唯一可以看到只有他在產品的研究進度,而這也是我看他未來的可能性。 其實生技不是我的拿手,講的白一點,我始終不得其門而入,就像一直卡在新手村的人,而且還沒有看到前方的路。 心悅生醫的產品,我覺得可以分三