Z字变换Python解法

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

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

P    A     H   N
A P L S I I G
Y     I     R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

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

例:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P       I      N
A   L S    I G
Y A  H R
P      I

# 解析:给定多少行,就初始化多少空字符,然后将给定字符串从第一个字符开始依次加入到每个空字符中,当加入到最后一个就反向遍历,遍历到第一个就再正向遍历

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows == 1 or numRows >= len(s): return s  # 只有一列的情况直接返回原字符串
        r, j, k = ['']*numRows, 0, 1  # 初始化几个空字符串,子字符串下标,计数器
        for i in s:  # 遍历每一个字符
            r[j] += i  # 添加到当前子字符串中
            j += k  # 换字符串
            if j == 0 or j == numRows-1: k=-k  # 当遍历到头或尾时改变遍历方向
        return ''.join(r)  # 直接将字符串连起来

上一篇:C++解OJ题--杨辉三角(动态规划,第一次二维有点紧张)


下一篇:力扣解法汇总6-Z 字形变换