1、題目
將一個給定字符串 s 根據(jù)給定的行數(shù) numRows ,以從上往下、從左到右進(jìn)行 Z 字形排列。
比如輸入字符串為 "PAYPALISHIRING" 行數(shù)為 3 時,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個新的字符串,比如:"PAHNAPLSIIGYIR"。
2、代碼
def convert(self, s, numRows):
"""
(1)V字型循環(huán),周期為n=(2*numRows-1)(2倍行數(shù) - 頭尾2個)。
(2)對于字符串索引值 i,計(jì)算 x = i % n 確定在循環(huá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)