Z字形变换(Python,LeetCode)

目录

题目描述

解决方案

代码

代码走读

传送门


 

题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z字形排列。

比如输入字符串为 LEETCODEISHIRING ,行数为3时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串:LCIRETOESIIGEDHN

 

解决方案

使用模拟法解决形象生动。

假设行数为n,我们生成n个列表表示成n行,定义一个指针变量模拟Z字形走向:从第1行依次往下,到达最后一行后在往上走,重复该循环,直到所有元素都被遍历完。

指针变量每走到一个元素,就将该元素插入到对应行数的列表中。最终将每一行字符连接输出,得到想要的结果。

复杂度分析:因为只需要遍历一遍字符串,因此时间复杂度为 O(n) 。只需要定义常数个变量,因此空间复杂度为 O(1) 。

 

代码

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s

        pool = [list() for i in range(numRows)]
        down = False
        pool_index = 0
        for char in s:
            if pool_index == numRows - 1 or pool_index == 0:
                down = not down
            pool[pool_index].append(char)
            if down:
                pool_index += 1
            else:
                pool_index -= 1

        result = "".join(["".join(element) for element in pool])
        return result

 

代码走读

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        // 如果给定的行数只有1行,那么只需要将原字符串返回
        if numRows == 1:
            return s

        // 定义存储每一行字符的二维列表
        pool = [list() for i in range(numRows)]

        // down变量用来定义此时模拟Z字型游标指针的走向(False为向上,True为向下)
        down = False

        // 游标指针变量,表示当前所在的行数
        pool_index = 0
        for char in s:
            // 如果游标抵达边界,需要改变方向
            if pool_index == numRows - 1 or pool_index == 0:
                down = not down

            // 对应行添加字符
            pool[pool_index].append(char)
            if down:
                pool_index += 1
            else:
                pool_index -= 1

        // 按照每一行字符依次拼接的方式输出结果
        result = "".join(["".join(element) for element in pool])
        return result


// 自测用例
if __name__ == '__main__':
    s = Solution()
    result = s.convert("LEETCODEISHIRING", 3)
    print(result)

 

传送门

LeetCode试题连接

range()函数

list()函数

list.append()方法

str.join()方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章