python3 resuelve la transformación en zigzag de leetcode

Tema Descripción:

Organiza una cadena dada en un patrón en zigzag de arriba a abajo y de izquierda a derecha de acuerdo con el número dado de líneas.

Por ejemplo, cuando la cadena de entrada es "LEETCODEISHIRING" y el número de líneas 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, produciendo una nueva cadena, por ejemplo: "LCIRETOESIIGEDHN".

Implemente esta función que transforma una cadena con un número específico de líneas:

string convert(string s, int numRows);

示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

Idea: debido al problema del comportamiento personal y los hábitos lógicos, cambié la palabra z a la siguiente y luego la miré verticalmente.

L  E  E  T
      C
   O
D  E  I  S
      H
   I
R  I   N  G 

 

Si el todo se considera como una matriz bidimensional, se encuentra que cada cambio ocurre desde el primero o el último, por lo que la regla es: voltear uno al lado del otro

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s
        if (len(s) == 1) or (len(s)<=numRows):
            return s
        result = [""] * numRows
        numIndex = 0
        is_down = False
        for s_str in s:
            result[numIndex] += s_str
            numIndex = numIndex-1 if is_down else numIndex+1
            if numIndex==0 or numIndex==(numRows-1):
                is_down = not is_down
        return "".join(result)

 

Supongo que te gusta

Origin blog.csdn.net/hard_days/article/details/101226577
Recomendado
Clasificación