一、题目描述
给定一个字符串和行数,按之字形排列,然后从左往右依次输出字符串。例如:给定字符串"012345678910111213114...",以及输出行数N=5,那么之子形排列如下:
最后输出字符串“0816179....”
二、思路
1.对于竖着排列的数字,相邻行之间相差2N-2(例如0 8 16 相差8)
2.对于斜着排列的数字:j+2*(numRows-1)-2*i(其中i为行索引,j不是列的索引)
三、C代码
char* convert(char* s, int numRows) {
int n=strlen(s);
char* a = (char*)malloc(n+1);
int k=0;
if(numRows==1 || n<=numRows)return s;
for(int i=0;i<numRows;i++)
{
for(int j=i;j<n;j+=2*(numRows-1))
{
a[k++]=s[j];
if(i!=0 && i!=numRows-1)
{
int t=j+2*(numRows-1)-2*i;
if(t<n)
a[k++]=s[t];
}
}
}
a[k]='\0';
return a;
}