当前位置: 首页 > 后端技术 > Python

LeetCodezigzag转换

时间:2023-03-26 11:44:21 Python

Zigzag转换题目来源:https://leetcode-cn.com/problems/zigzag-conversion/题目根据给定的行数,从上到下,从上到下,对给定的字符串进行转换从左到右锯齿形排列。例如,当输入字符串为“LEETCODEISHIRING”,行数为3时,排列如下:LCIRETOESIIGEDHN之后,你的输出需要从左到右逐行读取,生成一个新的字符串,例如:"LCIRETOESIIGEDHN"。请实现这个函数将字符串转换为指定行数:stringconvert(strings,intnumRows);示例1:输入:s="LEETCODEISHIRING",numRows=3输出:"LCIRETOESIIGEDHN"示例2:输入:s="LEETCODEISHIRING",numRows=4输出:"LDREOEIIECIHNTSG"解释:LDREOEIIECIHNTSG解题先判断给定的行数是否为1行或大于给定字符串的长度,满足上述条件。最终转换后的结果与原字符串相同,直接返回原字符串;题目中提到的变换,其实就是遍历字符串,将字符按照正序(这里指的是逐行降序)赋值给每一行,当运行到最后时,方向相反,将字符赋值给每一行以相反的顺序(在这种情况下,逐行向上)。当第一条线被触摸时,方向再次改变,以此类推,直到遍历结束;先为每一行初始化一个空值,给行赋值。当触摸到第一行或最后一行时,需要改变方向(详见代码),最后将所有元素合并返回。代码实现类Solution:defconvert(self,s:str,numRows:int)->str:'''Zigzagthestringargs:s:给定的字符串numRows:锯齿形排列的行数Returns:返回锯齿形排列的结果'''#给定列数为1,或者字符串长度大于等于直接返回ifnumRows==1ornumRows>=len(s):returns#排列时,只有正数order只有到达最后一列时才会改变方向,或者反转到第一列i,sign=0,False#先给每一行一个初始值lst=[''for_inrange(numRows)]#遍历string,一个一个linevalueaddedforchins:lst[i]+=ch#判断是否需要改变方向#以向下为正方向,向上为反方向#Touch顶行和最后一行需要改变位置ifi==0ori==numRows-1:sign=notsigni+=1ifsignelse-1#合并列表并返回合并后的字符串return''.join(lst)实现结果以上就是本文的主要内容欢迎关注微信公众号《书所集录》