LeetCode: transformation en Z

Description du problème: Disposez une chaîne de caractères donnée en zigzag de haut en bas et de gauche à droite en fonction du nombre de lignes donné. (Chaîne d'entrée s et nombre de lignes numRows, sortie dans le nouvel ordre)

Par exemple, lorsque la chaîne d'entrée est "LEETCODEISHIRING" et que le nombre de lignes est de 3, la disposition est la suivante:

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

Première méthode: trouver la loi

1. Modularité
Nous pouvons voir dans la forme de l'exemple ci-dessus que parce que ces Z se chevauchent, nous pouvons penser à "une verticale" plus "une mention" comme un petit module, tel que "LEET" comme premier Petit module, utilisez "CODE" comme deuxième petit module ...

2. Déterminez la taille du module
Tout d'abord, trouvez un exemple plus représentatif:

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

Nous pouvons conclure que "une verticale" d'un petit module est toujours 2 caractères de plus que la "une mention", et le nombre de caractères de "une verticale" est le nombre de lignes numRows, donc on peut déduire que la taille du petit module est:
batch_z = 2 * numRows-2

3. Déterminez la relation de sortie Si
vous effectuez une sortie par ligne (prenez le deuxième exemple comme exemple),
les éléments 0, 1, 2 et 3 de la ligne 0 ont 0% 6 = 0, 6% 6 = 0, 12% 6 = 0, 18% 6 = 0
Ligne 1, ligne 1, 1, 2, 3 éléments ont 1% 6 = 1,7% 6 = 1,13% 6 = 1,19% 6 = 1
···
L'ordre de sortie peut être dérivé de cette
4. Procédure

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)
Publié 41 articles originaux · loué 13 · visites 6692

Je suppose que tu aimes

Origine blog.csdn.net/comli_cn/article/details/104822316
conseillé
Classement