我们构建了一个包含 n 行( 索引从 1 开始 )的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
n = 3 ,第 1 行是 0 ,第 2 行是 01 ,第3行是 0110 。给定行数 n 和序数 k,返回第 n 行中第 k 个字符。( k 从索引 1 开始)
示例 1:
输入: n = 1, k = 1
输出: 0
解释: 第一行:0
示例 2:
输入: n = 2, k = 1
输出: 0
解释:
第一行: 0
第二行: 01
示例 3:
输入: n = 2, k = 2
输出: 1
解释:
第一行: 0
第二行: 01
提示:
1 <= n <= 301 <= k <= 2n - 1class Solution:
def kthGrammar(self, n: int, k: int) -> int:
old = [0]
for _ in range(n-1):
new = []
for n in old:
if n == 1:
new.append(1)
new.append(0)
else:
new.append(0)
new.append(1)
old = new
return old[k-1]
class Solution:
def kthGrammar(self, n: int, k: int) -> int:
if n == 1: return 0
if k % 2 == 1: return self.kthGrammar(n-1, (k+1)//2)
if k % 2 == 0: return 1 if self.kthGrammar(n-1, (k+1)//2) == 0 else 0