这题粗看之下很玄学,其实找对思路后真的十分简单。其实就是将字符串按照numRows
分行,同时创建一个长度为numRows
的二维数组。再按照次序遇到边界则进行回退或者上升的方式将字符放到二维数组中。
算法过程
- 创建二维数组
res
,数组长度为numRows
,负责存储遍历到的字符, 根据索引i
放到数组中 - 创建索引
i = 0
以及flag = -1
, 变量i
是将遍历到的字符c
存储到数组res
的索引。因为i
的变动是触底反弹的,遇到0
或者numRows
就往反方向递增或递减,flag
就是负责i
变动的方向 - 最后将数组
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)