0779. 第K个语法符号
大约 1 分钟
0779. 第K个语法符号
- 标签:位运算、递归、数学
- 难度:中等
题目链接
题目大意
描述:给定两个整数 和 。我们可以按照下面的规则来生成字符串:
- 第一行写上一个 。
- 从第二行开始,每一行将上一行的 替换成 , 替换为 。
要求:输出第 行字符串中的第 个字符。
说明:
- 。
- 。
示例:
- 示例 1:
输入: n = 2, k = 1
输出: 0
解释:
第一行: 0
第二行: 01
- 示例 2:
输入: n = 4, k = 4
输出: 0
解释:
第一行:0
第二行:01
第三行:0110
第四行:01101001
解题思路
思路 1:递归算法 + 找规律
每一行都是由上一行生成的。我们可以将多行写到一起找下规律。
可以发现:第 个数字是由上一位对应位置上的数字生成的。
- 在奇数位时,由上一行 位置的值生成。且与上一行 位置的值相同;
- 在偶数位时,由上一行 位置的值生成。且与上一行 位置的值相反。
接下来就是递归求解即可。
思路 1:代码
class Solution:
def kthGrammar(self, n: int, k: int) -> int:
if n == 0:
return 0
if k % 2 == 1:
return self.kthGrammar(n - 1, (k + 1) // 2)
else:
return abs(self.kthGrammar(n - 1, k // 2) - 1)
思路 1:复杂度分析
- 时间复杂度:。
- 空间复杂度:。