有規律字串中的第k個符號 K-th Symbol in Grammar Leetcode #779

閱讀時間約 2 分鐘

題目敘述

這題的題目一個規律變化的二進位字串,問我們第N排,第K個bit是多少?

變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10

第一排初始化是0

第二排是01

第三排是0110

第四排是01101001

...其餘依此類推

詳細的題目可在這裡看到


測試範例:

Example 1:

Input: n = 1, k = 1
Output: 0
Explanation: row 1: 0

Example 2:

Input: n = 2, k = 1
Output: 0
Explanation:
row 1: 0
row 2: 01

Example 3:

Input: n = 2, k = 2
Output: 1
Explanation:
row 1: 0
row 2: 01

約束條件

Constraints:

  • 1 <= n <= 30
  • 1 <= k <= 2n - 1

演算法

可以觀察生成規律

奇數編號都會和上一排的父節點(N-1, (K+1)/2)的相同

偶數編號都會和上一排的父節點(N-1, (K+1)/2)的相反

raw-image

由這個生成規律,寫出遞迴關係式,藉由遞迴解找出答案。


程式碼

class Solution:
 
 def kthGrammar(self, N: int, K: int) -> int:
  
  if N == 1:
   # Base case:
   return 0
  
  else:
   # General case:
   if K % 2 == 0:
    
    # even index of current level is opposite of parent level's [(K+1)//2]
    return 1 - self.kthGrammar(N-1, (K+1)//2)
   else:
    # odd index of current level is the same as parent level's [(K+1)//2]
    return self.kthGrammar(N-1, (K+1)//2)

複雜度分析

時間複雜度:

O( log k ) 最多往上回溯O(log k)次可以找到答案。

空間複雜度:

O( log k ) 遞迴recursion call stack 最大深度。


關鍵知識點

觀察字串生成規律,找出遞迴關係式。


Reference:

[1] Python/JS/Java/Go/C++ by math [w/ Comment] - K-th Symbol in Grammar - LeetCode

85會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
這題的題目會給我們一個輸入整數,要求我們判斷這個整數是否可以用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
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
幾點睡有差嗎 ? 大多數來說,有差 可是身體怎麼知道我幾點睡 ? 器官又沒有眼睛跟腦袋可以看時鐘?有差是會差多少呢?天生夜貓該怎麼調整呢? 今天我們就來聊聊這題吧!
上一篇說過監房各職級阿Sir,本篇正式講述一所監房內的每天流程。之前在荔枝角收押所大概也有描述,但正式『拍』正後到監獄則有所不同,每天程序由六點半開始…   0630-0700:每所監獄每朝都是六點半叫醒犯人(俗稱叫床),以前是夜班人員熱心地大聲叫喚,但現在則是準六點半響起收音機及亮燈。其實同室
Thumbnail
初稿:20231225 修訂:20240222 剛好看到一篇文, 台股沒有連續下跌2年, 似乎呼應了十年大週期, 投資人在每天努力的研究中, 就是希望找到漲跌的規律, 一做多就漲,一做空就跌, 但是當沖或日線、週線,都太短了, 很容易抓龜走鱉,或多空雙巴, 所以才要研究指數最
Thumbnail
子張問:『十世可知也?』子曰:殷因于夏禮,所損益可知也;周因于殷禮,所損益可知也。其或繼周者,雖百世,可知也』(為政第二)。 一世有三十年,十世就是三百年,百世就是三千年。『損』和『益』都是易經中的卦象。孔子晚年專注于注釋《易經》,相傳《易經》中的《易傳》即為孔子
Thumbnail
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
Thumbnail
長期投資人,📒需要遵守操作計畫以及進出紀律,當你擬定好計畫後,務必確實遵守。 持續遵守計畫,😊我們就會常常遇到市場給糖🍬
Thumbnail
健康是一個我們最常聽到很高大尚,但感覺離我們很遙遠的議題,「 有規律的生活原是健康與長壽的秘訣 ─巴爾札克」但真的是如此嗎? 如今大谷翔平完美詮釋了這段話,最令人佩服的地方在於他鉅細靡遺的計畫和超強執力,每天確實的執行,自律的完成所有的項目,每天都感受到進步,一步步成長成今天令人驚嘆的棒球英雄。
Thumbnail
等了好久,奧塞美術館的第二篇終於來了,這一次就要帶著大家進入這間美術館了! 大家都知道巴黎有很多的美術館和博物館,如果想要看完全部的藝術作品,可能就算從今天起開始住在巴黎,一間一間的看,到大家成為老爺爺、老奶奶之前,應該都看不完。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
幾點睡有差嗎 ? 大多數來說,有差 可是身體怎麼知道我幾點睡 ? 器官又沒有眼睛跟腦袋可以看時鐘?有差是會差多少呢?天生夜貓該怎麼調整呢? 今天我們就來聊聊這題吧!
上一篇說過監房各職級阿Sir,本篇正式講述一所監房內的每天流程。之前在荔枝角收押所大概也有描述,但正式『拍』正後到監獄則有所不同,每天程序由六點半開始…   0630-0700:每所監獄每朝都是六點半叫醒犯人(俗稱叫床),以前是夜班人員熱心地大聲叫喚,但現在則是準六點半響起收音機及亮燈。其實同室
Thumbnail
初稿:20231225 修訂:20240222 剛好看到一篇文, 台股沒有連續下跌2年, 似乎呼應了十年大週期, 投資人在每天努力的研究中, 就是希望找到漲跌的規律, 一做多就漲,一做空就跌, 但是當沖或日線、週線,都太短了, 很容易抓龜走鱉,或多空雙巴, 所以才要研究指數最
Thumbnail
子張問:『十世可知也?』子曰:殷因于夏禮,所損益可知也;周因于殷禮,所損益可知也。其或繼周者,雖百世,可知也』(為政第二)。 一世有三十年,十世就是三百年,百世就是三千年。『損』和『益』都是易經中的卦象。孔子晚年專注于注釋《易經》,相傳《易經》中的《易傳》即為孔子
Thumbnail
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
Thumbnail
長期投資人,📒需要遵守操作計畫以及進出紀律,當你擬定好計畫後,務必確實遵守。 持續遵守計畫,😊我們就會常常遇到市場給糖🍬
Thumbnail
健康是一個我們最常聽到很高大尚,但感覺離我們很遙遠的議題,「 有規律的生活原是健康與長壽的秘訣 ─巴爾札克」但真的是如此嗎? 如今大谷翔平完美詮釋了這段話,最令人佩服的地方在於他鉅細靡遺的計畫和超強執力,每天確實的執行,自律的完成所有的項目,每天都感受到進步,一步步成長成今天令人驚嘆的棒球英雄。
Thumbnail
等了好久,奧塞美術館的第二篇終於來了,這一次就要帶著大家進入這間美術館了! 大家都知道巴黎有很多的美術館和博物館,如果想要看完全部的藝術作品,可能就算從今天起開始住在巴黎,一間一間的看,到大家成為老爺爺、老奶奶之前,應該都看不完。