算法学习打卡计划

leetcode第六题 ——Z字型变化

2019-11-09  本文已影响0人  不分享的知识毫无意义

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.解析

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

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)

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

上一篇下一篇

猜你喜欢

热点阅读