1. 程式人生 > >【LeetCode】 779. 第K個語法符號

【LeetCode】 779. 第K個語法符號

遞迴

  1. 題目

在第一行我們寫上一個 0。接下來的每一行,將前一行中的0替換為01,1替換為10。
給定行數 N 和序數 K,返回第 N 行中第 K個字元。(K從1開始)
例子:
輸入: N = 1, K = 1
輸出: 0
輸入: N = 2, K = 1
輸出: 0
輸入: N = 2, K = 2
輸出: 1
輸入: N = 4, K = 5
輸出: 1
解釋:
第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001

  1. 分析
    將每一行寫出尋找規律:
n
1 0
2 0 1
3 0 1 1 0
4 0 1 1 0 0 1 1 0
5 0 1 1 0 0 1 1 0 1 0 0 1 0 1 1 0

第n行:奇數位與n-1行相同;偶數位置與n-1相反
3. 程式碼

include <iostream>
using namespace std;
int kthGrammar(int N, int K)
{
    if(N==1)
        return 0;
    else
{ if(K%2==1){ return kthGrammar(N-1,K/2+1); } else return !kthGrammar(N-1,K/2); } } int main() { int n,m; while(cin>>n>>m) { cout << kthGrammar(n,m) << endl; } return 0; }

參考別人的演算法


class Solution
{ public: int kthGrammar(int N, int K) { if(K==1) return 0; if(K==2) return 1; int res=0; for(int i=N-2;i>=0;--i) { if(K>pow(2,i)) {K=K-pow(2,i);res=1-res; } return res; } };