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的空间还是爆炸性的!
  • 相关阅读:
    冒泡排序
    Objective-C 命名规范
    时间轴的制作
    CocoaPods 哪些事
    消息转发机制入门篇
    架构
    算法学习
    AutoLayout自动布局
    网络学习
    HDU 3832 Earth Hour (最短路)
  • 原文地址:https://www.cnblogs.com/remly/p/12777169.html
Copyright © 2011-2022 走看看