在第一行我們寫上乙個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。
給定行數 n 和序數 k,返回第 n 行中第 k個字元。(k從1開始)
例子:輸入: n = 1, k = 1
輸出: 0
輸入: n = 2, k = 1
輸出: 0
輸入: n = 2, k = 2
輸出: 1
輸入: n = 4, k = 5
輸出: 1
解釋:第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001
注意:n 的範圍 [1, 30].
k 的範圍 [1, 2^(n-1)].
這道題目重在理解,可以先來計算表示上一行的長度,
計算出來之後,前半段和上一行位置的數相同,後半段和相同位置的數相反
class
solution
//計算上一行的長度,也就是本行長度折半
int prevlen =(1
<<
(n -1)
)/2;
if(k<= prevlen)
else
}}
class
solution
(object):
defkthgrammar
(self, n, k)
:"""
:type n: int
:type k: int
:rtype: int
"""#這道題目重在理解,前半段和上一行位置的數相同,後半段和相同位置的數相反
if n ==1:
return
0#計算上一行的長度,也就是本行長度折半
#" // " 表示整數除法,返回不大於結果的乙個最大的整數
prevlen =(1
<<
(n -1)
)//2if k<= prevlen:
#位於前半段,則等於上一行相同位置的值
return self.kthgrammar(n -
1, k)
else
:#位於後半段,則等於上一行相同位置的值取反
return
1-self.kthgrammar(n -
1, k-prevlen )
LeetCode779 第K個語法符號
在第一行我們寫上乙個0。接下來的每一行,將前一行中的0替換為01,1替換為10。給定行數n和序數k,返回第n行中第k個字元。k從1開始 例子 輸入 n 1,k 1輸出 0輸入 n 2,k 1輸出 0輸入 n 2,k 2輸出 1輸入 n 4,k 5輸出 1解釋 第一行 0 第二行 01 第三行 011...
leetcode779 第k個語法符號。
直接找規律。第一行 0 第二行 01 第三行 0110 第四行 01101001 可以發現,第n行的數量比第n 1行多了一倍,並且前半部分是和第n 1行一樣的,後半部分是前半部分 按位取反 得到的。第n行的字元數量是2 n 1 個,因此第n 1行的數量就是2 n 2 個。公式為 func n,k f...
leetcode 779 第K個語法符號
在第一行我們寫上乙個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。給定行數 n 和序數 k,返回第 n 行中第 k個字元。k從1開始 例子 輸入 n 1,k 1 輸出 0 輸入 n 2,k 1 輸出 0 輸入 n 2,k 2 輸出 1 輸入 n 4,k 5 輸出 1 解釋 第一行 0...