6. ZigZag Conversion
Start on Leetcode OJ, and just record accepted code here:
- 解题思路
首先弄清ZigZag的含义,然后找到规律。输出顺序如下:每2*(numRows-1)为一组,每行按组的顺序输出。首行和末行每一组输出一个,输出的字符下标%2*(numRowa-1)等于行号。其余行每组输出两个,输出的规律与字符下标和行号相关,每组输出字符下标之和%2*(numRows-1)为0。
- 代码
char* convert(char* s, int numRows)
{
int len=strlen(s);
char *s1=malloc(sizeof(char)*(len+1));
int k=0;
if(numRows==1||len<=numRows)
return s;
int i,j;
int lap=2*numRows-2;
for(i=0;i<numRows;i++)
{
for(j=i;j<len;j+=lap)
{
s1[k++]=s[j];
if(i!=0&&i!=numRows-1)
{
int t=j+lap-2*i;
if(t<len)
s1[k++]=s[t];
}
}
}
s1[k]='\0';
return s1;
}
- 需要注意的地方
- 字符串s1初始化分配内存空间char*(len+1);
- 最后s1[k]=’\0’不能少;
- 考虑特殊情况numRows=1和len<=numRows,直接return s;