在第一行我们写上一个 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
的范围 [1, 30]
.
K
的范围 [1, 2^(N-1)]
.
C++
class Solution {
public:
int kthGrammar(int N, int K)
{
if(1==N)
{
return 0;
}
int flag=0;
long long tmp=pow(2,N-1);
while(N>1)
{
tmp/=2;
if(K>tmp)
{
flag=1-flag;
K-=tmp;
}
N--;
}
if(flag)
{
return 1;
}
return 0;
}
};
python
class Solution:
def kthGrammar(self, N: int, K: int) -> int:
if 1==N:
return 0
tmp=2**(N-1)
flag=0
while N>1:
tmp>>=1
if K>tmp:
flag=1-flag
K-=tmp
N-=1
if flag:
return 1
return 0