借鉴了K神的解法。设置flag用以确定位置。
char* convert(char* s, int numRows) {
//如果字符只有一列或者没有
if(numRows==1||(!s)||strlen(s)<=numRows){
return s;
}
int len=strlen(s);
char *result[numRows];
for(int i=0;i<numRows;i++){
result[i]=(char*)malloc(len+1); //用数组指针来记录不同行的字符
}
int counts[numRows];
memset(counts,0,sizeof(counts));
char* res=malloc(len+1); //保存最终结果
int flag=-1; int row=0;
for(int i=0;i<len;i++){
if(row==0||row==numRows-1){
flag=-flag;
}
result[row][counts[row]]=s[i];
counts[row]++;
row=row+flag;
}
int pos=0;
for(int i=0;i<numRows;i++){
memcpy(res+pos,result[i],counts[i]);
pos=pos+counts[i];
}
res[pos]='\0';
return res;
}