将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。
看到这一定会想起将每一行存储成为一个字符串,之后再进行合并即可,那么如何在遍历的过程中将对应字母存放在相应的行字符串中,最先想到的是利用除法取余的方式,比较麻烦,于是想到每次进行排列的时候,要是到最后一行下一次就会向上排列,每一次到最上面一行,之后就会向下排列。那么就可以设置一个标志位flag,一旦到第一行,设置为1,一旦到最后一行设置为-1,具体的实现规律如下所示:
具体实现代码:
# 解题思路:将每一行组成一个字符串数组,最后再进行合并即可
# 从上往下每次行数加1,如果相反,行数减1
class Solution:
def convert(self, s: str, numRows: int) -> str:
# 定义numRows哥字符串数组
list_double = ["" for _ in range(numRows)]
i = 0
flag = 1
if numRows == 1:
return s
for c in s:
list_double[i] += c
if i == 0:
flag = 1
if i == numRows-1:
flag = -1
i += flag
return "".join(list_double)
来源:力扣(LeetCode)
链接:力扣官网
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。