题目描述:
在第一行我们写上一个 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
思路:
找规律:
第N行的个数 pow(2,N-1)
第N-1行的个数 pow(2,N-2)
因此第N行的个数是第N-1行的个数的2倍
且第N行的数中
----前一半跟第N-1行的数一样,后一半与第N-1行的数相反
代码如下:
class Solution {
public:
int kthGrammar(int N, int K) {
if(N==1||N==0) return 0;
int tmp=pow(2,N-2);
if(K<=tmp)
return kthGrammar(N-1,K);
else return kthGrammar(N-1,K-tmp)==1?0:1;
}
};