假设在第一行上,我们有一个0。现在,在每一行中,我们查看前一行,并将每个出现的0替换为01,并将每个出现的1替换为10。假设我们有N行,索引为K,必须在第N行中找到第K个索引符号。(K的值是1索引。)(1索引)。因此,如果N = 4且K = 5,则输出将为1。这是因为-
第1行:0
第2行:01
第3列:0110
第4列:01101001
为了解决这个问题,我们将遵循以下步骤-
假设方法的名称是kthGrammar。这需要N和K。
如果N为1,则返回0
如果k为偶数,则当kthGrammar(N – 1,K / 2)为0时返回1,否则为0
否则返回kthGrammar(N – 1,(K + 1)/ 2)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int kthGrammar(int N, int K) { if(N == 1) return 0; if(K % 2 == 0){ return kthGrammar(N - 1, K / 2) == 0 ? 1 : 0; }else{ return kthGrammar(N - 1, (K + 1) / 2); } } }; main(){ Solution ob; cout << (ob.kthGrammar(4, 5)); }
4 5
输出结果
1