Try   HackMD

K-th Symbol in Grammar
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Solution 1: Recursive 1

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

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