刷題系列 - K-th 語法

張國平發表於2020-02-27

這個題目有點繞,其實很簡單。

題目是一行都是隻有0或者1兩個元素,下一行是當前的轉變,0的元素變為01,1的元素變為10。

舉例如下,那麼給出行數N,和橫向位數K,那個元素是0還是1.

比如如下給出N是4,K是5,那個元素就是1。

Explanation:

row 1: 0 row 2: 01 row 3: 0110 row 4: 01101001


其實這個問題某種意義上就是簡單版的帕斯卡三角,如果頭鐵一層一層遞迴下來當然可以,不過效率太低了。

分析了下,其實對於當前行的橫向位數K,就是上一行向上取整K/2位的元素的轉變過來的,如果上一個是0,則是0或者1,如果若非偶數,就是0,如果偶數就是1;對於1,非偶數則是1,偶數是0。按照這個道理遞迴即可。


程式碼如下,int((K+1)/2)是為了向上取整。

class Solution:
    def kthGrammar(self, N: int, K: int) -> int:
        defuatN = 4
        defautRow = '01101001'
        if K < 8:
            return int(defautRow[K-1])
        else:
            if K%2 == 1:
                re = self.kthGrammar(N-1,int((K+1)/2))
            else:
                re = 0 if self.kthGrammar(N-1,int((K+1)/2)) == 1 else 1
            return re


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2677569/,如需轉載,請註明出處,否則將追究法律責任。

相關文章