題目來源:https://leetcode-cn.com/problems/zigzag-conversion/python
將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。segmentfault
好比輸入字符串爲 "LEETCODEISHIRING" 行數爲 3 時,排列以下:bash
L C I R E T O E S I I G E D H N
以後,你的輸出須要從左往右逐行讀取,產生出一個新的字符串,好比:"LCIRETOESIIGEDHN"。微信
請你實現這個將字符串進行指定行數變換的函數:函數
string convert(string s, int numRows);spa
示例 1:code
輸入: s = "LEETCODEISHIRING", numRows = 3 輸出: "LCIRETOESIIGEDHN"
示例 2:blog
輸入: s = "LEETCODEISHIRING", numRows = 4 輸出: "LDREOEIIECIHNTSG" 解釋: L D R E O E I I E C I H N T S G
class Solution: def convert(self, s: str, numRows: int) -> str: '''將字符串進行 Z 字形排列 Args: s: 給定的字符串 numRows: 按多少行進行 Z 字形排列 Returns: 返回 Z 字形排列的結果 ''' # 給定列數爲 1,或者大於等於字符串長度直接返回 if numRows == 1 or numRows >= len(s): return s # 排列時,只有正序到最後一列,或者逆序到第一列時,方向纔會改變 i, sign = 0, False # 先給每行一個初始值 lst = ['' for _ in range(numRows)] # 遍歷字符串,逐行添值 for ch in s: lst[i] += ch # 判斷方向是否須要改變 # 以向下爲正向,向上會逆向 # 觸及最頂行,最末行都需改變位置 if i == 0 or i == numRows - 1: sign = not sign i += 1 if sign else - 1 # 合併列表返回合併後的字符串 return ''.join(lst)
以上就是本篇的主要內容
歡迎關注微信公衆號《書所集錄》