前往此题

这题粗看之下很玄学,其实找对思路后真的十分简单。其实就是将字符串按照numRows分行,同时创建一个长度为numRows的二维数组。再按照次序遇到边界则进行回退或者上升的方式将字符放到二维数组中。

算法过程

  1. 创建二维数组res,数组长度为numRows,负责存储遍历到的字符, 根据索引i放到数组中
  2. 创建索引i = 0以及flag = -1, 变量i是将遍历到的字符c存储到数组res的索引。因为i的变动是触底反弹的,遇到0或者numRows就往反方向递增或递减,flag就是负责i变动的方向
  3. 最后将数组res转成字符串即可

代码

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows < 2: return s

        res = ["" for _ in range(numRows)]

        i = 0
        flag = -1
        for c in s:
            res[i] += c
            if i == 0 or i == numRows - 1: flag = - flag
            i += flag
        return "".join(res)