leetcode-779:第K个语法符号

简介: leetcode-779:第K个语法符号

题目

题目连接

我们构建了一个包含 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

解题

方法一:递归

参考链接

如果节点为左子节点,那么和父节点一样,如何节点为右子节点,那么和父节点值相反。

比如n=3,k=3的情况,此时 (3&1)=1,!(3&1)=0,0异或x=x,因此k为奇数的时候,就和父节点的值相等,因此递归去算父节点的值就行了。

class Solution {
public:
    int kthGrammar(int n, int k) {
        if(n==1) return 0;
        return !(k&1)^kthGrammar(n-1,(k+1)/2);
    }
};
相关文章
|
7月前
|
C#
C#学习相关系列之常用符号介绍
C#学习相关系列之常用符号介绍
|
C语言
学C的第二天(变量‘补充’;简单了解常量,字符串,转义字符,注释,if选择语句,while循环语句)(1)
4.4*变量的使用(上期继续补充): 字符类型: %c - 字符类型 %d - 整型 %s - 字符串 %f - float类型 %lf - double类型
112 0
|
7月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
84 0
|
7月前
|
存储 C++
第一章:C++中的注释、变量和数据类型、运算符
第一章:C++中的注释、变量和数据类型、运算符
48 0
|
7月前
|
测试技术 C语言
LeetCode | 58.最后一个单词的长度(C语言版)
LeetCode | 58.最后一个单词的长度(C语言版)
77 1
|
存储 程序员 C语言
初识c语言系列-2-常,变量,字符(串),转义字符和注释
初识c语言系列-2-常,变量,字符(串),转义字符和注释
初识c语言系列-2-常,变量,字符(串),转义字符和注释
|
机器学习/深度学习 C语言
C语言中常见的符号和注释的用法
C语言中常见的符号和注释的用法
280 0
|
SQL 算法 Java
【Go语言刷题篇】Go从0到入门2:类型转换、字符求和、运算符运算(加减乘除取余比较符)练习
本系列文章采用牛客的核心代码模式进行案例代码提供,帮助大家从0到入门的学习过程中进行配套的刷题~
【Go语言刷题篇】Go从0到入门2:类型转换、字符求和、运算符运算(加减乘除取余比较符)练习
复习C部分:1.什么是常量 2.初时字符串 3.初识转义字符 4.注释 5.初识选择语句 6.初识循环语句 7.初识函数和数组 8.初识操作符 9.初始操作符2
复习C部分:1.什么是常量 2.初时字符串 3.初识转义字符 4.注释 5.初识选择语句 6.初识循环语句 7.初识函数和数组 8.初识操作符 9.初始操作符2
118 0
复习C部分:1.什么是常量 2.初时字符串 3.初识转义字符 4.注释 5.初识选择语句 6.初识循环语句 7.初识函数和数组 8.初识操作符 9.初始操作符2