將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。
比如輸入字符串爲 "LEETCODEISHIRING"
行數爲 3 時,排列如下:
L C I R E T O E S I I G E D H N
之後,你的輸出需要從左往右逐行讀取,產生出一個新的字符串,比如:"LCIRETOESIIGEDHN"。
請你實現這個將字符串進行指定行數變換的函數:
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
解題思路:根據Z字變形的規律。
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if not s:
return ""
if numRows == 1:
return s
s_Rows = [""] * numRows
i = 0
n = len(s)
while i < n:
for j in range(numRows):
if i < n:
s_Rows[j] += s[i]
i += 1
for j in range(numRows-2, 0, -1):
if i < n:
s_Rows[j] += s[i]
i += 1
return "".join(s_Rows)
if __name__ == '__main__':
solution = Solution()
print(solution.convert('LEETCODEISHIRING', 4))