1、题目
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
2、代码
def convert(self, s, numRows):
"""
(1)V字型循环,周期为n=(2*numRows-1)(2倍行数 - 头尾2个)。
(2)对于字符串索引值 i,计算 x = i % n 确定在循环周期中的位置。
(3)则行号 y= min(x, n - x)。
"""
if numRows == 1:
return s
rows = [""] * (numRows)
n = 2 * numRows - 2
for i in range(0, len(s)):
x = i % n
print("i:", i, "n:", n, "x:", x)
rows[min(x, n - x)] += s[i]
return "".join(rows)