TVP

# LeetCode刷题实战6：Z字形变换

2500

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) https://leetcode.com/problems/zigzag-conversion/

``````P   A   H   N
A P L S I I G
Y   I   R
And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string s, int numRows);
Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"
Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P     I    N
A   L S  I G
Y A   H R
P     I``````

``````def convert(text, numRows):
# 记录每一行结果的dict
lines = {}
if numRows == 0:
return text

for i in range(len(text)):
# 计算应该放在哪一行
idx = i % (2 * numRows - 2)
# 判断是在递增区间还是递减区间
if idx >= numRows:
idx = 2 * numRows - 2 - idx

line = lines.get(idx, "")
lines[numRows] = line + text[i]

result = ""
# 拼接答案
for i in range(numRows):
result += lines[i]
return result``````

0 条评论

LV.