在第一行我们写上一个 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
简析:每一行的其中一个数都是由上一行里面的一个决定的,所以就递归依次从对应的上一行那个开始找就好了。
class Solution {
public:
int kthGrammar(int N, int K) {
if(N == 1 and K == 1)
return 0;
if(N == 2 and K == 1)
return 0;
if(N == 2 and K == 2)
return 1;
else
{
if(K % 2 == 0)
{
if(kthGrammar(N-1,K/2) == 1)
return 0;
else
return 1;
}else
{
if(kthGrammar(N-1,(K+1)/2) == 1)
return 1;
else
return 0;
}
}
}
};