例子:
"PAYPALISHIRING"
排列成锯齿形为:
P A H N A P L S I I G Y I R 输出字符串为:"PAHNAPLSIIGYIR"
. 算法上没什么太大难度,主要是需要找出规律:假设需要排列成5行0 8 16 1 7 9 15 17 2 6 10 14 18 3 5 11 13 19 4 12 20 0-20表示原字符串s的下标。找出每个锯齿与每个锯齿之间的规律,可以看出第一行和最后一行(RowNum)均没有斜值 ,其余行的斜值与竖值之间相差2*(RowNum-行标),而不同锯齿之间的竖值相差2*(RowNum-1);因此程序如下面所示:
char* convert(char* s, int numRows) {
char *result;
int length = strlen(s);
if(s==NULL || numRows<=1 || length<=1)
{
return s;
}
char *temp = (char*)malloc(sizeof(char)*(length+1));
result=temp;
temp[length]='\0';
for(int i=0; i<numRows; i++)
{
for(int j=i; j<length; j+=2*numRows-2)
{
*temp = s[j];
temp++;
if(i>0 && i<numRows-1)
{
if(j+2*(numRows-i-1)<length)
{
*temp = s[j+2*(numRows-i-1)];
temp++;
}
}
}
}
return result;
}