LeetCode每日一题——779. 第K个语法符号

简介: 我们构建了一个包含 n 行( 索引从 1 开始 )的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。

题目

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

思路

假如每个序列就是把一个0-indexed的,且转换关系为0-01和1-10,那么我们发现奇数位的数字永远和上一行对应的数字不同,那么就需要找到翻转了多少次,翻转奇数次则为1,偶数次为0(未翻转),,上一行的idx位置在下一行的(idx<<1)处相同,在((idx<<1)+1)处不同,那么本质就是计算(k-1)的比特数的奇偶

题解

class Solution:
    def kthGrammar(self, n: int, k: int) -> int:
        return bin(k-1).count('1')&1
目录
相关文章
|
算法 Java 索引
【洛谷算法题】P5704-字母转换【入门1顺序结构】
【洛谷算法题】P5704-字母转换【入门1顺序结构】
|
6月前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
6月前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
7月前
|
Java 测试技术 Python
每日一题《剑指offer》字符串篇之表示数值的字符串
每日一题《剑指offer》字符串篇之表示数值的字符串
49 0
每日一题《剑指offer》字符串篇之表示数值的字符串
|
7月前
|
索引
leetcode-779:第K个语法符号
leetcode-779:第K个语法符号
51 0
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
|
C语言
牛客网语法刷题(C语言) — 输出格式化
牛客网语法刷题(C语言) — 输出格式化
109 0
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——排列字母
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】——排列字母~ 都是精华内容,可不要错过哟!!!😍😍😍
147 0
华为机试每日一练--第三题:字符串分隔
连续输入字符串,请按长度为8拆分每个输入字符串并进行输出; •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
华为机试每日一练--第三题:字符串分隔
|
算法 测试技术 C语言
【C语言每日一题】——倒置字符串
倒置字符串🙌 题目描述:将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I 输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述:依次输出倒置之后的字符串,以空格分割
117 0