class Solution:
def kthGrammar(self, N: int, K: int) -> int:
old_string = '0'
for i in range(1, N):
new_string = ''
for ch in old_string:
if ch == '0':
new_string += '01'
else:
new_string += '10'
old_string = new_string
return old_string[K - 1]
超时!
找出递推关系。通过题目可以知道,第N行的元素是由第N-1行的元素确定的,且第N-1行的一个元素依次确定第N行的两个元素。所以我们可以得出,第N行的第K个元素由第N-1行的第(K+1)/2个元素确定。并且我们可以分类K的奇偶和(K+1)/2的取值得出递推关系
3. 找出边界条件。当N=1时,直接返回0.
作者:serendipity-3s
链接:https://leetcode-cn.com/problems/k-th-symbol-in-grammar/solution/779di-kge-yu-fa-fu-hao-by-serendipity-3s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一般而言,第 K
位的父位应该是第 (K+1) / 2
位。如果父位是 0
,那么这一位就是 1 - (K%2)
。如果父位是 1
,那么这一位就是 K%2
。
class Solution(object):
def kthGrammar(self, N, K):
if N == 1: return 0
return (1 - K%2) ^ self.kthGrammar(N-1, (K+1)//2)