代码演示
思路
- 模拟输出,找到规律就好
char * convert(char * s, int numRows){
if (numRows == 1) return s;
int n = strlen(s);
char *ss = (char *)malloc(sizeof(char) * (n + 1));
ss[n] = '\0';
//输出第一行
int t = 1, it = 0;
while (t <= n) {
//printf("%c", s[t - 1]);
ss[it++] = s[t - 1];
t += (numRows - 1) << 1;
}
int k = numRows - 2;
for (int i = 2; i < numRows; i++) {
t = i;
int flag = 0;
while (t <= n) {
//printf("%c", s[t - 1]);
ss[it++] = s[t - 1];
if (k == 0) {
t += (numRows - 1) << 1;
} else {
if (!flag) {
t += k << 1;
} else {
t += ((numRows - 1) << 1) - (k << 1);
}
}
flag = !flag;
}
--k;
}
t = numRows;
while (t <= n) {
// printf("%c", s[t - 1]);
ss[it++] = s[t - 1];
t += (numRows - 1) << 1;
}
return ss;
}