Organice una cuerda determinada en un patrón de zigzag de arriba hacia abajo y de izquierda a derecha de acuerdo con el número de líneas dado.
Por ejemplo, cuando la cadena de entrada es "LEETCODEISHIRING" y el número de filas es 3, la disposición es la siguiente:
Después de L C I R
ETOESIIG
E D H N
, su salida debe leerse línea por línea de izquierda a derecha para generar una nueva cadena, como: "LCIRETOESIIGEDHN".
Implemente esta función que transforma una cadena en un número específico de líneas:
string convert (string s, int numRows);
Ejemplo 1:
Entrada: s = "LEETCODEISHIRING", numRows = 3
Salida: "LCIRETOESIIGEDHN"
Ejemplo 2:
Entrada: s = "LEETCODEISHIRING", numRows = 4
Salida: "LDREOEIIECIHNTSG"
Explicación:
L D R
E OE II
EC IH N
T S G
Fuente: LeetCode
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows < 2: # 一行的情况下 直接返回
return s
res = ["" for _ in range(numRows)]
i, flag = 0, -1
# flag 必须现为 -1
# 因为 现为1 的话 进入 if判断 变为 -1 然后 0 += -1 i = -1
# 就错了
for c in s:
res[i] += c
if i == 0 or i == numRows - 1:
flag = -flag
i += flag
return ''.join(res)