Leetcode Z字形变换

Z子变换

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

1、行数为1和2特殊情况单独处理:

2、一个list管理n行的字符串,  t和d管理插入到第几行的字符串 ,最后逐行拼接字符串

class Solution:
    def convert(self, s: str, numRows: int) -> str:

        if numRows ==1:
            return s
        if numRows==2:
            return s[0::2] + s[1::2]
        final =["" for i in range(numRows)]

        t= 0
        d = 1
        i = 0
        max1 = numRows-2
        while i<len(s):
            


            final[t]+=s[i]
            t+=d
            if d==1 and t>=numRows:
                t = max(numRows-2,0)
                d= -1
            elif d==-1 and t<1:
                t = 0
                d =1
            i+=1
        s1=''
        #print(final)
        for i in range(len(final)):
            s1 +=final[i]
        return s1

  

posted @ 2020-07-04 18:58  SuckChen  阅读(179)  评论(0编辑  收藏  举报