码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【LeetCode】779. 第K个语法符号


    题目

    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
    
    • 1
    • 2
    • 3

    示例 2:

    输入: n = 2, k = 1
    输出: 0
    解释: 
    第一行: 0 
    第二行: 01
    
    • 1
    • 2
    • 3
    • 4
    • 5

    示例 3:

    输入: n = 2, k = 2
    输出: 1
    解释:
    第一行: 0
    第二行: 01
    
    • 1
    • 2
    • 3
    • 4
    • 5

    提示:

    • 1 <= n <= 30
    • 1 <= k <= 2n - 1

    题解1(TLE)

    思路

    • 模拟

    代码

    class Solution:
        def kthGrammar(self, n: int, k: int) -> int:
            old = [0]
            for _ in range(n-1):
                new = []
                for n in old:
                    if n == 1:
                        new.append(1)
                        new.append(0)
                    else:
                        new.append(0)
                        new.append(1)
                old = new
            return old[k-1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    复杂度

    • 时间复杂度: O ( 2 n ) O(2^n) O(2n)
    • 空间复杂度: O ( 2 n ) O(2^n) O(2n)

    题解2

    思路

    • 因为 0 → 01 0\rightarrow 01 0→01以及 1 → 10 1 \rightarrow 10 1→10,不难发现有以下递归关系式:
      f ( n , k ) = { f ( n − 1 , ⌈ n 2 ⌉ ) k m o d    2 = 0 0 k m o d    2 = 1 ∧ f ( n − 1 , ⌈ n 2 ⌉ ) = 1 1 k m o d    2 = 1 ∧ f ( n − 1 , ⌈ n 2 ⌉ ) = 0 f(n,k)= \left\{
      f(n−1,⌈n2⌉)kmod2=00kmod2=1∧f(n−1,⌈n2⌉)=11kmod2=1∧f(n−1,⌈n2⌉)=0" role="presentation">f(n−1,⌈n2⌉)01kmod2=0kmod2=1∧f(n−1,⌈n2⌉)=1kmod2=1∧f(n−1,⌈n2⌉)=0f(n−1,⌈n2⌉)kmod2=00kmod2=1∧f(n−1,⌈n2⌉)=11kmod2=1∧f(n−1,⌈n2⌉)=0
      \right.
      f(n,k)=⎩ ⎨ ⎧​​f(n−1,⌈2n​⌉)01​kmod2=0kmod2=1∧f(n−1,⌈2n​⌉)=1kmod2=1∧f(n−1,⌈2n​⌉)=0​

    代码

    class Solution:
        def kthGrammar(self, n: int, k: int) -> int:
            if n == 1: return 0
            if k % 2 == 1: return self.kthGrammar(n-1, (k+1)//2)
            if k % 2 == 0: return 1 if self.kthGrammar(n-1, (k+1)//2) == 0 else 0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    复杂度

    • 时间复杂度: O ( log ⁡ k ) O(\log k) O(logk)
    • 空间复杂度: O ( log ⁡ k ) O(\log k) O(logk)
  • 相关阅读:
    中国艺术孙溟㠭篆刻《绕绕》
    卷积神经网络文本分析,一文读懂卷积神经网络
    《软件质量保证与测试》第 9 章——测试自动化及其框架 重点部分总结
    contentDocument contentWindow,canvas 、svg,iframe
    Week 7 CNN Architectures - LeNet-5、AlexNet、VGGNet、GoogLeNet、ResNet
    JS加密/解密那些必须知道的事儿
    怎么优化H5让它可以在300ms以内打开?
    MyBatis框架——Mybatis操作数据库之简单的insert操作的实现
    淘宝API系列,商品详情数据的获取(数据聚全)
    【Python&GIS】解决GIS属性表、矢量字段乱码,中文乱码
  • 原文地址:https://blog.csdn.net/apple_50661801/article/details/127435425
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号