leetcode第六题 ——Z字型变化

1.题目

原题:

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

例子:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L     D     R
E   O E   I I
E C   I H   N
T     S     G

2.解析

这道题不涉及任何数据结构的知识,就是一个简单的找规律问题,把规律找到这道题就可以解决。
这道题在做的过程中,遇到了几个问题,记录一下:

  • n个空列表生成的问题
    python可以使用列表推导式生成空列表,以供不同的场景使用
  • 列表转字符串的问题
    可以用''.join(list_name)的形式实现
  • 逻辑问题
    可以发现规律,设置游标和数组记录不同行应该记录的东西,再把列表连接起来。

3.python代码

class Solution:
    def convert(self, s, numRows):
        if numRows == 1:
            return s
        list_Set = [[] for _ in range(numRows)]
        i = 0
        column = 0
        cflag = 0
        while i < len(s):
            if cflag % (numRows - 1) == 0:
                list_Set[column].append(s[i])
                i += 1
            else:
                if column == numRows - cflag - 1:
                    list_Set[column].append(s[i])
                    i += 1
                else:
                    i = i
            column += 1
            if column == numRows:
                cflag += 1
                column = 0
                if cflag == numRows - 1:
                    cflag = 0
        out_list = []
        for _ in list_Set:
            out_list.extend(_)
        return ''.join(out_list)

这样做完效率比较低,主要是执行的操作比较多,可以进行进一步优化,后续再思考。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,146评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,948评论 0 5
  • 需求 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCOD...
    惑也阅读 2,622评论 0 1
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 8,810评论 0 6
  • 不知何时,喜欢上了摄影。 这一年,走过了春夏秋冬。 这一年,走过了无数美景。
    无声静候阅读 1,111评论 0 4