779. 第K个语法符号
中等
277
相关企业
我们构建了一个包含
n
行( 索引从 1 开始 )的表。首先在第一行我们写上一个0
。接下来的每一行,将前一行中的0
替换为01
,1
替换为10
。
- 例如,对于
n = 3
,第1
行是0
,第2
行是01
,第3行是0110
。给定行数
n
和序数k
,返回第n
行中第k
个字符。(k
从索引 1 开始)
示例 1:输入: n = 1, k = 1 输出: 0 解释: 第一行:0示例 2:
输入: n = 2, k = 1 输出: 0 解释: 第一行: 0 第二行: 01示例 3:
输入: n = 2, k = 2 输出: 1 解释: 第一行: 0 第二行: 01提示:
1 <= n <= 30
1 <= k <= 2n - 1
这道题其实刚开始看第一眼想到的是递归我写的dfs,发现想的太复杂了,因为这个题粗略看上去有点像二叉树,但是写成二叉树之后发现时间复杂度是longk感觉不是最优的解,于是乎就改成了循环来做,时间复杂度是o(n)时间秒杀当前所有的c提交者
int kthGrammar(int n, int k){
if(k==1)
{
return 0;
}
if(k==2)
{
return 1;
}
int i=0;
while(n>0)
{
if(k&1)
{
k++;
}else{
i++;
}
k/=2;
n--;
}
if(i&1)
{
return 1;
}else{
return 0;
}
}
写的复杂了一点其实原来一点都不复杂,但是还是连续错了四次,,,,因为刚开始想复杂了,因为输出的结果只有0,1两种,那么我们其实很好找规律,那么就是当我们k的变化规则为奇数的时候我们就相当于没变也就是0,变化规则是偶数的时候就是变了那就是1,即可得出解