LeetCode: transformação em forma de Z

Descrição do problema: Organize uma sequência de caracteres em um padrão em zigue-zague de cima para baixo e da esquerda para a direita, de acordo com o número especificado de linhas. (String de entrada s e número de linhas numRows, saída em nova ordem)

Por exemplo, quando a sequência de entrada é "LEETCODEISHIRING" e o número de linhas é 3, a organização é a seguinte:

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

Método um: encontre a lei

1. Modularidade
Podemos ver pela forma do exemplo acima que, como esses Z se sobrepõem, podemos pensar em "uma vertical" mais "uma menção" como um pequeno módulo, como "LEET" como o primeiro Módulo pequeno, use "CODE" como o segundo módulo pequeno ...

2. Determine o tamanho do módulo
Primeiro, encontre um exemplo mais representativo:

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

Podemos concluir que a "uma vertical" de um módulo pequeno tem sempre mais 2 caracteres do que a "uma menção", e o número de caracteres de "uma vertical" é o número de linhas numRows, portanto, pode-se inferir que o tamanho do módulo pequeno é:
batch_z = 2 * numRows-2

3. Determine o relacionamento de saída Se
você produzir por linha (considere o segundo exemplo como exemplo),
os 0, 1, 2 e 3 elementos da linha 0 possuem 0% 6 = 0, 6% 6 = 0, 12% 6 = 0, 18% 6 = 0
Linha 1, linha 1, 1, 2, 3 elementos possuem 1% 6 = 1,7% 6 = 1,13% 6 = 1,19% 6 = 1
···
A ordem de saída pode ser derivada disso
4. Procedimento

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)
Publicado 41 artigos originais · elogiou 13 · visitas 6692

Acho que você gosta

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