有規律字串中的第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

86會員
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
幾點睡有差嗎 ? 大多數來說,有差 可是身體怎麼知道我幾點睡 ? 器官又沒有眼睛跟腦袋可以看時鐘?有差是會差多少呢?天生夜貓該怎麼調整呢? 今天我們就來聊聊這題吧!
上一篇說過監房各職級阿Sir,本篇正式講述一所監房內的每天流程。之前在荔枝角收押所大概也有描述,但正式『拍』正後到監獄則有所不同,每天程序由六點半開始…   0630-0700:每所監獄每朝都是六點半叫醒犯人(俗稱叫床),以前是夜班人員熱心地大聲叫喚,但現在則是準六點半響起收音機及亮燈。其實同室
Thumbnail
初稿:20231225 修訂:20240222 剛好看到一篇文, 台股沒有連續下跌2年, 似乎呼應了十年大週期, 投資人在每天努力的研究中, 就是希望找到漲跌的規律, 一做多就漲,一做空就跌, 但是當沖或日線、週線,都太短了, 很容易抓龜走鱉,或多空雙巴, 所以才要研究指數最
Thumbnail
子張問:『十世可知也?』子曰:殷因于夏禮,所損益可知也;周因于殷禮,所損益可知也。其或繼周者,雖百世,可知也』(為政第二)。 一世有三十年,十世就是三百年,百世就是三千年。『損』和『益』都是易經中的卦象。孔子晚年專注于注釋《易經》,相傳《易經》中的《易傳》即為孔子
Thumbnail
題目給定一個規律變化的二進位字串,問我們第N排,第K個bit是多少? 變化的規律: 上一排的0到下一排展開成01,上一排的1到下一排展開成10 第一排初始化是0 第二排是01 第三排是0110 第四排是01101001 ...其餘依此類推 詳細的題目可在這裡看到
Thumbnail
長期投資人,📒需要遵守操作計畫以及進出紀律,當你擬定好計畫後,務必確實遵守。 持續遵守計畫,😊我們就會常常遇到市場給糖🍬
Thumbnail
健康是一個我們最常聽到很高大尚,但感覺離我們很遙遠的議題,「 有規律的生活原是健康與長壽的秘訣 ─巴爾札克」但真的是如此嗎? 如今大谷翔平完美詮釋了這段話,最令人佩服的地方在於他鉅細靡遺的計畫和超強執力,每天確實的執行,自律的完成所有的項目,每天都感受到進步,一步步成長成今天令人驚嘆的棒球英雄。
Thumbnail
等了好久,奧塞美術館的第二篇終於來了,這一次就要帶著大家進入這間美術館了! 大家都知道巴黎有很多的美術館和博物館,如果想要看完全部的藝術作品,可能就算從今天起開始住在巴黎,一間一間的看,到大家成為老爺爺、老奶奶之前,應該都看不完。