zoukankan      html  css  js  c++  java
  • 779. 第K个语法符号

    <找规律>

    <递归>

    题目描述


    在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为011替换为10

    给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)


    例子:

    输入: N = 1, K = 1
    输出: 0
    
    输入: N = 2, K = 1
    输出: 0
    
    输入: N = 2, K = 2
    输出: 1
    
    输入: N = 4, K = 5
    输出: 1
    
    解释:
    第一行: 0
    第二行: 01
    第三行: 0110
    第四行: 01101001
    


    注意:

    1. N 的范围 [1, 30].
    2. K 的范围 [1, 2^(N-1)].

    我的思路 - 迭代


     (误)

    class Solution:
        def kthGrammar(self, N: int, K: int) -> int:
         # 省略N=1,N=2的判定,初始从N=3开始 n
    = '01' pre = n for i in range(3,N+1): if i%2==1: n = n+n[::-1] else: n += pre[::-1]+pre pre=n return n
    • 算法:

    1. 找规律,奇数行很简单,上一行 + 上一行的反转
    2. 偶数行 = 上一行 + 上一个偶数行的反转 + 上一个偶数行
    3. 2  01
      3  0110
      4  01101001
      5  0110100110010110
      6  01101001100101101001011001101001
      7  0110100110010110100101100110100110010110011010010110100110010110
    • 存在的问题:

    1. 虽然把时间优化了,但是2^30的空间还是爆炸性的!
  • 相关阅读:
    C语言I博客作业02
    第一次作业
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    课程目标
    具体方面
  • 原文地址:https://www.cnblogs.com/remly/p/12777169.html
Copyright © 2011-2022 走看看