美文网首页
6.Z字形变换

6.Z字形变换

作者: 赵苏苏_5d86 | 来源:发表于2019-08-19 16:50 被阅读0次

    链接

    LeeCode-6-Z字形变换

    参考

    知乎

    题目描述

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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
    

    实现(python3)

    分析得每一个Z字的首字母差,numRows*2-2位置
    建立s_Rows = [""] * numRows,依次将每行的字母加入进去,最后得到变换后的字符串

    class Solution():
        def convert(self, s, numRows):
            if numRows == 1:
                return s
            s_Rows = [""] * numRows
            i = 0
            n = len(s)
            while i < n:
                # print(i)
                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)
    

    除了首尾两行,每个Z字有两个字母,索引号关系为,一个为i,另一个为numsRows*2-2-i
    data存放每个z型,然后res由每行变换后的字符串组成

    class Solution():
        def convert(self, s, numRows):
            if numRows == 1:
                return s
            n = len(s)
            data = []
            split_s_len = numRows * 2 - 2
    
            for i in range(0,n,split_s_len):
                data.append(s[i:i+split_s_len])
            res = ""
            for i in range(numRows):
                for tmp in data:
                    # print(tmp)
                    # print(i)
                    if i < len(tmp):
                        if i == 0 or i == numRows - 1:
                            res += tmp[i]
                        else:
                            res += tmp[i]
                            if split_s_len - i < len(tmp):
                                res += tmp[split_s_len - i]
            return res
    

    相关文章

      网友评论

          本文标题:6.Z字形变换

          本文链接:https://www.haomeiwen.com/subject/ycoxsctx.html