📅  最后修改于: 2023-12-03 15:07:44.706000             🧑  作者: Mango
给定一个字符串和一个正整数N,将该字符串以“Z字形”顺序打印,即第一行从左到右打印,第二行从右到左打印,第三行从左到右打印,以此类推,完成 N 行之后再返回到第一行,继续打印,直至字符串结束。
例如:输入字符串为 "LEETCODEISHIRING",N=3 时,输出的 Zig-Zag 排列如下所示:
L C I R
E T O E S I I G
E D H N
我们可以根据题目描述按照 Zig-Zag 的顺序模拟字符串的拼接,我们可以使用一个长度为 N 的字符串数组,将每行的字符依次填入其中,最后将所有行拼接起来即可。
具体思路如下:
注意事项:
Python 代码实现如下:
def convert(s: str, numRows: int) -> str:
# 处理特殊情况
if numRows == 1 or numRows >= len(s):
return s
# 初始化字符串数组
rows = [""] * numRows
# 初始行为 0,flag 为 -1,表示从上到下拼接字符串;行为 numRows-1,flag 为 1,表示从下到上拼接字符串。
cur_row, flag = 0, -1
for char in s:
# 将当前字符拼接到对应的行中
rows[cur_row] += char
# 到达行首或行尾时,转变拼接方向
if cur_row == 0 or cur_row == numRows - 1:
flag = -flag
cur_row += flag
# 拼接所有字符串数组
return "".join(rows)
时间复杂度分析:
该题目使用“Z字形”顺序拼接字符串,需要注意行指针的变化和特殊情况的处理。代码实现较为简单,时间复杂度为 O(N)。