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
目录
相关文章
|
5月前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
5月前
|
存储 算法 测试技术
力扣经典150题第十七题:罗马数字转整数
力扣经典150题第十七题:罗马数字转整数
46 0
|
5月前
|
算法
力扣经典150题第十八题:整数转罗马数字
力扣经典150题第十八题:整数转罗马数字
29 0
|
6月前
|
索引
leetcode-779:第K个语法符号
leetcode-779:第K个语法符号
47 0
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
【LeetCode-每日一题】-面试题46. 把数字翻译成字符串
|
12月前
|
算法
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
61 0
|
C语言
牛客网语法刷题(C语言) — 输出格式化
牛客网语法刷题(C语言) — 输出格式化
103 0
|
算法 测试技术 C语言
【C语言蓝桥杯每日一题】—— 单词分析
题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。 现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。 输入描述 输入一行包含一个单词,单词只由小写英文字母组成。 对于所有的评测用例,输入的单词长度不超过 1000。 输出描述 输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
329 0
【C语言蓝桥杯每日一题】—— 单词分析
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——排列字母
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】——排列字母~ 都是精华内容,可不要错过哟!!!😍😍😍
142 0
|
JavaScript 前端开发 测试技术
【Javascript - 力扣每日一题】13. 罗马数字转整数
【Javascript - 力扣每日一题】13. 罗马数字转整数
109 0