--- tags: data_structure_python --- # K-th Symbol in Grammar <img src="https://img.shields.io/badge/-easy-brightgreen"> On the first row, we write a `0`. Now in every subsequent row, we look at the previous row and replace each occurrence of `0` with `01`, and each occurrence of `1` with `10`. Given row `N` and index `K`, return the `K-th` indexed symbol in row `N`. (The values of `K` are 1-indexed.) ``` Examples: Input: N = 1, K = 1 Output: 0 Input: N = 2, K = 1 Output: 0 Input: N = 2, K = 2 Output: 1 Input: N = 4, K = 5 Output: 1 Explanation: row 1: 0 row 2: 01 row 3: 0110 row 4: 01101001 ``` **Note:** - N will be an integer in the range [1, 30]. - K will be an integer in the range [1, 2^(N-1)]. # Solution ![](https://i.imgur.com/AmWYxpH.png) ### Solution 1: Recursive 1 ```python= class Solution: def kthGrammar(self, N: int, K: int) -> int: if N == 1: return "0" else: row = self.kthGrammar(N-1, (K+1)//2) if row == "0": return "0" if (K%2)-1 == 0 else "1" else: return "1" if (K%2)-1 == 0 else "0" ``` ### Solution 2: Recursive 2 ```python= class Solution: def kthGrammar(self, N: int, K: int) -> int: if N == 1: # Base case: return 0 else: # General case: if K % 2 == 0: # even index of current level is opposite of parent level's [(K+1)//2] return 0 if self.kthGrammar(N-1, (K+1)//2) else 1 else: # odd index of current level is the same as parent level's [(K+1)//2] return 1 if self.kthGrammar(N-1, (K+1)//2) else 0 ```