題目描述
將一個(gè)給定字符串根據(jù)給定的行數(shù)国旷,以從上往下、從左到右進(jìn)行 Z 字形排列茫死。
比如輸入字符串為 "LEETCODEISHIRING" 行數(shù)為 3 時(shí)跪但,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的輸出需要從左往右逐行讀取峦萎,產(chǎn)生出一個(gè)新的字符串屡久,比如:"LCIRETOESIIGEDHN"。
請(qǐng)你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù):
string convert(string s, int numRows);
示例 1:
輸入: s = "LEETCODEISHIRING", numRows = 3
輸出: "LCIRETOESIIGEDHN"
示例 2:
輸入: s = "LEETCODEISHIRING", numRows = 4
輸出: "LDREOEIIECIHNTSG"
解釋:
L D R
E O E I I
E C I H N
T S G
思路
1爱榔、2numrows - 2為一組循環(huán)
2被环、設(shè)置一個(gè)列表,將每行的元素防止對(duì)應(yīng)列表索引中
3搓蚪、列表的行索引為元素索引 index = i %(2num_rows-2)蛤售,一組一循環(huán),
但是一組是兩列,索引在第二列需要更新為 2*num_rows-2 - index
4悴能、列表轉(zhuǎn)字符串
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows <= 1:
return s
res = [[] for i in range(numRows)]
for i in range(len(s)):
index = i % (2 * numRows - 2)
index = index if index < numRows else (2 * numRows - 2 - index)
res[index].append(s[i])
outs = ""
for i in res:
outs += "".join(i)
return outs