位元操作 應用題 判斷輸入是否為2^k 二的冪 Leetcode 231: Power of Two

閱讀時間約 2 分鐘


題目敘述

這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用2^k 的形式來表達 (二的冪)?

詳細的題目可在這裡看到


測試範例

Example 1:

Input: n = 1
Output: true
Explanation: 20 = 1

Example 2:

Input: n = 16
Output: true
Explanation: 24 = 16

Example 3:

Input: n = 3
Output: false

約束條件

Constraints:

  • -231 <= n <= 231 - 1

 

Follow up: Could you solve it without loops/recursion?


演算法

除了比較直覺的不斷除以二,判斷是否能剛好整除2的相除法之外。

class Solution:
 def isPowerOfTwo(self, n: int) -> bool:

  while n > 1:
   if n % 2 != 0:
    return False

   n /= 2

  return n == 1


還有位元操作判斷法。

用n bitwiseAND (n-1) == 0 去判斷是否為2^n。
(這是因為2^k在二進位表達式中,只會有一個bit1出現)

2^k = 二進位的 100000..... 0


程式碼

class Solution:
 def isPowerOfTwo(self, n: int) -> bool:
  
  if n <= 0:
   return False 
  
  # note:
  # power of 2 in binary      = b' 1000 ... 0
  # power of 2 minus 1 in binary = b' 0111 ... 1
  # bitwise AND of n and (n-1) must be 0 if n is power of 2
  
  return ( n & ( n-1 ) ) == 0

複雜度分析

時間複雜度:

O( 1 ) 固定長度32bits的位元操作。

空間複雜度:

O(1) 都是固定尺寸的臨時變數,所占用的記憶體空間為常數級別。


關鍵知識點

聯想到2^k在二進位表達式中的規律為 10000...0 只會有一個bit 1出現

可以同步複習高度關聯的相似衍伸題 Power of four


Reference:

[1] Python/JS/Java/C++/Go O( 1 ) by bit-manipulation, [+ explanation ] - Power of Two - LeetCode

avatar-img
89會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
題目會給定兩個字串s,t,把裡面的井字號#視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部依照規則處理完以後,s,t剩下的字串內容兩者是否相等?
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給定我們一組十進位表示法的阿拉伯數字,要求我們把它轉換為對應的羅馬數字。
題目會給定我們一組羅馬數字,要求我們把它轉換為對應十進位表示法的阿拉伯數字。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用4^k 的形式來表達?
這題算是路徑計數類的DP衍伸題(路徑數、方法數、組合數...等等這種枚舉類的題目,第一時間切入除了想到DFS+回溯法之外,也可以留意DP動態規劃解題的可能性) 題目會給我們一個指定長度為arrLen的陣列,起點從index=0開始出發,每次移動可以往左移一格,往右移一格,或是留在原地不
題目會給定兩個字串s,t,把裡面的井字號#視為鍵盤上的backspace,往前(往左方)吃掉最靠近的字元。 請位最後全部依照規則處理完以後,s,t剩下的字串內容兩者是否相等?
題目會給我們節點總數目n、左子樹的關係陣列、右子樹的關係陣列,要求我們驗證在給定的條件下,能不能構成一顆合法的二元樹。
題目會給定我們一組十進位表示法的阿拉伯數字,要求我們把它轉換為對應的羅馬數字。
題目會給定我們一組羅馬數字,要求我們把它轉換為對應十進位表示法的阿拉伯數字。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
本文章探討了在樂齡鋼琴課中,良好溝通的重要性。透過理解學生的需求與感受,教師不僅是教導者,也是幫助學生圓夢的夥伴。文章分享了教師在面對不同學生時的經驗與應對策略,強調創建無壓力的課堂氛圍,以促進樂齡族群對音樂的熱愛和享受。
Thumbnail
這次要試用的是 MEOOF 慕斯智能餵食器(視訊版) 這款餵食器最酷的特點 ✓強力密封上蓋 緊密貼合 防止空氣鑽入 導致食物失去新鮮 ✓雙艙出糧 左右可放不同飼料或凍乾 或是可拆掉隔板擴大儲糧空間 ✓5.5L超大容量 迴轉出糧 紅外線感應
Thumbnail
《情緒行為操控心理學》讀後書評分享!原來這就是巴姆特效應,透過巴姆特效應,竟然可以讓人變成神機妙算,甚至運用在生活中成為超級銷售員。還有好多心理學小知識,不僅可以了解其他人的想法,更可運用在生活中,讓自己變得更好!
Thumbnail
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 and運算 let andResult = bin1 & bin2 print(String(andResult,radix: 2))//
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用2^k 的形式來表達 (二的冪)?
昨天進行一個小考,來檢視學生學習的成效如何。發現,應用問題有「亂寫」狀況。「亂寫」,只是表示學生寫錯,不是計算錯誤那種類型,而是被除數跟除數搞錯。 心想著,除了重新檢討這個數學問題的意思之外,還有什麼是老師可以做的,來幫助學生更能理解數學。晚上睡前,就胡思亂想了起來。
Thumbnail
AI的簡介:人工智能(Artificial Intelligence,簡稱AI)已經深入我們的日常生活,改變了我們的生活方式,並為我們帶來了更多便利。這篇文章將探討人工智能在生活中的多個應用,並簡單介紹幾款具有代表性的AI應用程序,讓你更了解這項令人振奮的AI技術。
Thumbnail
從跟著教學影片把老師的程式抄過一遍,變成看到題目能把題目轉為程式,對於初學者來說蠻困難的。所以我想以初學者的角度來分享自己怎麼適應這段轉換的過程,以及我解題的方法是什麼。(也順便紀錄一下自己的思路) ※主題:流程控制為主的綜合小應用 ※題目:讓使用者輸入一個數字,並用程式判斷該數字是否為質數
Thumbnail
在ChatGPT橫空出世的當下😮,如何提一個好問題或是下一個好指令,成為人們的新技能🎯,但是身為老師的您,真的會問好問題嗎🤔?還有良好的提問技巧您掌握住了嗎🎓? 在課堂上,問題提問是一個重要的環節,有助於引導學生思考和參與🌟。 以下是一些常用的提問公式,以及在課堂上的應用和範例📚。
Thumbnail
雖然純詞性類已經淡出了會考選擇題的出題舞台,但在我的系統裡,詞性卻是重要的「解題武器」之一;這個武器的優勢是,他不是用事先背起來的、而是可以現場判斷,只要多加練習,有些題目「不用知道答案,也可以得分」。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
本文章探討了在樂齡鋼琴課中,良好溝通的重要性。透過理解學生的需求與感受,教師不僅是教導者,也是幫助學生圓夢的夥伴。文章分享了教師在面對不同學生時的經驗與應對策略,強調創建無壓力的課堂氛圍,以促進樂齡族群對音樂的熱愛和享受。
Thumbnail
這次要試用的是 MEOOF 慕斯智能餵食器(視訊版) 這款餵食器最酷的特點 ✓強力密封上蓋 緊密貼合 防止空氣鑽入 導致食物失去新鮮 ✓雙艙出糧 左右可放不同飼料或凍乾 或是可拆掉隔板擴大儲糧空間 ✓5.5L超大容量 迴轉出糧 紅外線感應
Thumbnail
《情緒行為操控心理學》讀後書評分享!原來這就是巴姆特效應,透過巴姆特效應,竟然可以讓人變成神機妙算,甚至運用在生活中成為超級銷售員。還有好多心理學小知識,不僅可以了解其他人的想法,更可運用在生活中,讓自己變得更好!
Thumbnail
以底下兩數字為例: let bin1:UInt8 = 0b11111111 //255 let bin2:UInt8 = 0b00001000 //8 and運算 let andResult = bin1 & bin2 print(String(andResult,radix: 2))//
Thumbnail
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用2^k 的形式來表達 (二的冪)?
昨天進行一個小考,來檢視學生學習的成效如何。發現,應用問題有「亂寫」狀況。「亂寫」,只是表示學生寫錯,不是計算錯誤那種類型,而是被除數跟除數搞錯。 心想著,除了重新檢討這個數學問題的意思之外,還有什麼是老師可以做的,來幫助學生更能理解數學。晚上睡前,就胡思亂想了起來。
Thumbnail
AI的簡介:人工智能(Artificial Intelligence,簡稱AI)已經深入我們的日常生活,改變了我們的生活方式,並為我們帶來了更多便利。這篇文章將探討人工智能在生活中的多個應用,並簡單介紹幾款具有代表性的AI應用程序,讓你更了解這項令人振奮的AI技術。
Thumbnail
從跟著教學影片把老師的程式抄過一遍,變成看到題目能把題目轉為程式,對於初學者來說蠻困難的。所以我想以初學者的角度來分享自己怎麼適應這段轉換的過程,以及我解題的方法是什麼。(也順便紀錄一下自己的思路) ※主題:流程控制為主的綜合小應用 ※題目:讓使用者輸入一個數字,並用程式判斷該數字是否為質數
Thumbnail
在ChatGPT橫空出世的當下😮,如何提一個好問題或是下一個好指令,成為人們的新技能🎯,但是身為老師的您,真的會問好問題嗎🤔?還有良好的提問技巧您掌握住了嗎🎓? 在課堂上,問題提問是一個重要的環節,有助於引導學生思考和參與🌟。 以下是一些常用的提問公式,以及在課堂上的應用和範例📚。
Thumbnail
雖然純詞性類已經淡出了會考選擇題的出題舞台,但在我的系統裡,詞性卻是重要的「解題武器」之一;這個武器的優勢是,他不是用事先背起來的、而是可以現場判斷,只要多加練習,有些題目「不用知道答案,也可以得分」。