LeetCode: transformación en forma de Z

Descripción del problema: Organice una cadena de caracteres dada en un patrón en zigzag de arriba a abajo y de izquierda a derecha según el número de líneas dado. (Ingrese la cadena sy el número de filas numRows, salida en nuevo orden)

Por ejemplo, cuando la cadena de entrada es "LEETCODEISHIRING" y el número de filas es 3, la disposición es la siguiente:

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

Método uno: encuentra la ley

1. Modularidad
Podemos ver en la forma del ejemplo anterior que debido a que estas Z se superponen, podemos pensar en "una vertical" más "una mención" como un módulo pequeño, como "LEET" como el primer Módulo pequeño, use "CÓDIGO" como el segundo módulo pequeño ...

2. Determine el tamaño del módulo
Primero, encuentre un ejemplo más representativo:

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

Podemos concluir que la "una vertical" de un módulo pequeño siempre tiene 2 caracteres más que la "única mención", y la cantidad de caracteres de "una vertical" es la cantidad de líneas numRows, por lo que podemos inferir el tamaño del módulo pequeño como:
batch_z = 2 * numRows-2

3. Determine la relación de salida Si
saca por línea (tome el segundo ejemplo como ejemplo),
los elementos 0, 1, 2 y 3 de la línea 0 tienen 0% 6 = 0, 6% 6 = 0, 12% 6 = 0, 18% 6 = 0
Línea 1, línea 1, 1, 2, 3 elementos tienen 1% 6 = 1,7% 6 = 1,13% 6 = 1,19% 6 = 1
···
El orden de salida puede derivarse de esto
4. Procedimiento

class Solution:
    def convert(self, s: str, numRows: int) -> str:
    	new_s = []
    	if numRows == 0:
    		return None
    	elif numRows == 1:
    		return s
    	batch_z = 2*numRows-2  #一条竖边和一条斜边构成一个z
    	vertical_z = int((batch_z+2)/2)   # 竖边的长度
    	oblique_z = batch_z-vertical_z  #斜边的长度

    	for j in range(0,vertical_z):
    		for i in range(0,len(s)):
    			if i%batch_z == j or i%batch_z == batch_z-j:
    				new_s.append(s[i])

    	new_s = ''.join(new_s)  # 将列表里的元素放在一个字符串里面
    	return new_s

if __name__ == '__main__':
	solution1 = Solution()
	s = "12345678"
	#s = "abcdefghi"
	#s = "a"
	print("s=",s)
	numRows = 1
	new_s = solution1.convert(s,numRows)
	print(new_s)
Publicó 41 artículos originales · elogió 13 · visitas 6692

Supongo que te gusta

Origin blog.csdn.net/comli_cn/article/details/104822316
Recomendado
Clasificación