---
# System prepended metadata

title: "779.\_K-th\_Symbol\_in\_Grammar"
tags: [LeetCode]

---

# [779. K-th Symbol in Grammar](https://leetcode.com/problems/k-th-symbol-in-grammar/description/)
## 1. 題目說明
- **有一個列表，初始化為 ==`'0'`==**
- **每次會生成一個新的列**
- **生成規則：**
    1. **表中只有兩種符號 ==`'0'、'1'`==**
    2. **對於列表中的所有符號，**
        - **若該符號為 ==`'0'`==，則將該符號變成 ==`"01"`==**
        - **若該符號為 ==`'1'`==，則將該符號變成 ==`"10"`==**
    - **ex：`"01"` => `"0110"`**
    - **ex：`"0110"` => `"01101001"`**
- **使用者輸入參數 ==`n、k`==**
- **要索引表中==第 n 列==的==第 k 個==符號，並輸出**
## 2. 解題思路1(二元樹搜索)
- **把每次的生成結果記錄下來**
- **假設==往左子樹==的方向設為 ==`'0'`==**
- **假設==往右子樹==的方向設為 ==`'1'`==**
```mermaid
flowchart
 n1([row 1]) -->
 n2([row 2]) -->
 n3([row 3]) -->
 n4([row 4]) 
 a1([0]) --0--> b1([0])
 a1 --1--> b2([1])
 b1 --00--> c1([0])
 b1 --01--> c2([1])
 b2 --10--> c3([1])
 b2 --11--> c4([0])
 c1 --000--> d1([0])
 c1 --001--> d2([1])
 c2 --010--> d3([1])
 c2 --011--> d4([0])
 c3 --100--> d5([1])
 c3 --101--> d6([0])
 c4 --110--> d7([0])
 c4 --111--> d8([1])
```
1. **==左子節點==的==符號不變==**
2. **==右子節點==的==符號反向==**
3. **==第 k 個==符號的 ==index = k - 1==**
4. **==第 n 列==的符號串會繼承至==n + 1 列==的左半邊**
    - **ex：**
    - **`row 2 = "01"`**
    - **`row 3 = "0110"`**
    - **`row 4 = "01101001"`**
5. **所以==第 n 列==的==第 k 個==符號，與==第 n + x 列==的==第 k 個==相同**
    - **==x > 0==**
### ● 程式碼
```cpp=
int kthGrammar(int n, int k) {
    bool ans = 0;//初始符號為0
    k--;
    while (k > 0) {
        //右子節點為1，符號反向
        //反之不變
        if (k % 2 == 1)
            ans = !ans;
        k /= 2;
    }
    return (int)ans;
}
```
---
