6.Z字形变换

链接

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETC...
    LeeYunFeng阅读 4,463评论 0 50
  • 一、题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPAL...
    Mage阅读 3,846评论 0 1
  • 6. Z 字形变换 题目 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为...
    索毅阅读 1,508评论 0 0
  • 高人愿意教你东西真的是看缘分的,缘分若没有,何必需要浪费口舌呢?如果遇到了自己不懂珍惜,也会错过使生命高度提升...
    未央行者阅读 2,939评论 0 0
  • 呃,今天的猫小嘿有些不舒服,还是上来坚持日更,唉,为自己鼓个掌吧(ಡωಡ)
    漫话时光阅读 962评论 0 4