思路:二维矩阵模拟
- 构造二维矩阵z_array,将s中的字符按照z字形填入,然后按照行列读出z_array的非空字符。
- z_array的行数为r=numRows,一个画z字形的周期t=r+r-2=2r-2,每个周期有r-1列,一共有int(len(s)/t)+1个周期,因此可以计算出列数。
- 填入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