Transformation en zigzag de sujet
Organisez une chaîne donnée s dans un motif en zigzag de haut en bas et de gauche à droite en fonction du nombre donné de lignes numRows.
Par exemple, lorsque la chaîne d'entrée est "PAYPALISHIRING" et que le nombre de lignes est 3, la disposition est la suivante:
PAHN
APLSIIG
YIR
Après cela, votre sortie doit être lue ligne par ligne de gauche à droite pour produire une nouvelle chaîne, telle que "PAHNAPLSIIGYIR".
Veuillez implémenter cette fonction qui convertit une chaîne en un nombre spécifié de lignes:
string convert (string s, int numRows);
Exemple 1:
Entrée: s = "PAYPALISHIRING", numRows = 3
Sortie: "PAHNAPLSIIGYIR"
Exemple 2:
Entrée: s = "PAYPALISHIRING", numRows = 4
Sortie: "PINALSIGYAHRPI"
Explication:
PIN
ALSIG
YAHR
PI
Exemple 3:
Entrée: s = "A", numRows = 1
Sortie: "A"
rapide:
1 <= s.length <= 1000
s 由英文字母(小写和大写)、',' 和 '.' 组成
1 <= numRows <= 1000
Source:
Lien LeetCode : https://leetcode-cn.com/problems/zigzag-conversion
réponse en langage c
Le code fait référence à la pratique du leetcode
char * convert(char * s, int numRows){
int len=strlen(s);
int i;
int j;
int k=0;
char*a=(char*)malloc(sizeof(char) * (len + 1));
if(numRows==1)return s;
//b代表循环体长度
int b=2*numRows-2;
for(i=0;i<numRows;i++)
for(j=0;j<len;j++){
if(j%b==i||j%b==b-i)
{
a[k]=s[j];
k++;
}
}
//这一行必须由,否则报错.
a[k]='\0';
return a;
}
Idées:
Au début, j'ai toujours voulu utiliser le reste pour le faire, mais l'exemple que j'ai écrit est le suivant. Je n'ai pas trouvé la règle pour la trouver. Après avoir regardé les grands ci-dessus, j'ai trouvé que je devais commencer à partir de 0 pour le reste, donc l'exemple commence à 0. Commencez à écrire, il est très facile de trouver le motif, puis bouclez chaque ligne et enregistrez-la.
1 7
2 68
3 5 9
4 10