思路:二维矩阵模拟

  1. 构造二维矩阵z_array,将s中的字符按照z字形填入,然后按照行列读出z_array的非空字符。
  2. z_array的行数为r=numRows,一个画z字形的周期t=r+r-2=2r-2,每个周期有r-1列,一共有int(len(s)/t)+1个周期,因此可以计算出列数。
  3. 填入s中字符s[i]的时候,当i%t<r-1时,向下走,z_array的坐标x加1,y不动,否则向右上走,x减1,y加1。
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        n = len(s)
        r = numRows
        if n < r or r == 1:
            return s
        t = 2*r - 2
        num_t = int(n/t)+1
        col = (r-1)*num_t
        z_array = [[0]*col for _ in range(r)]
        i = 0
        x = 0
        y = 0
        while i < n:
            if i%t < r-1:
                z_array[x][y] = s[i]
                x += 1
                i += 1
            else:
                z_array[x][y] = s[i]
                x -= 1
                y += 1
                i += 1
        #print(z_array)
        res = ''
        for i in range(len(z_array)):
            for j in range(len(z_array[0])):
                if z_array[i][j]:
                    res += z_array[i][j]
        return res