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_stringreturn 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 0return (1 - K%2) ^ self.kthGrammar(N-1, (K+1)//2)
