题目来源: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)
以上就是本篇的主要内容
欢迎关注微信公众号《书所集录》