题目:Z 字形变换
将一个给定字符串 s
根据给定的行数 numRows
,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING"
行数为 3
时,排列如下:
P A H N A P L S I I G Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"
。
思路:找规律,找到每次循环的跨度:2 * numRows - 2
代码:
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return "".join(s)
if numRows == 2:
return "".join(s[0::2] + s[1::2])
dict_num = {}
for i in range(numRows):
dict_num[i] = []
step = 2 * numRows - 2
for j, num in enumerate(s):
if j % step < numRows:
dict_num[j % step].append(num)
else:
dict_num[(step - j % step)].append(num)
res = str()
for val in dict_num.values():
res += "".join(val)
return res
s = "PAYPALISHIRING"
numRows = 2
s1 = Solution()
res = s1.convert(s, numRows) # ""PINALSIGYAHRPI"
print(res)