近期開始刷Leetcode题目。花了一个星期先完毕了easy难度级别的题目,easy级别的题目思路比較简单,但不一定就直接AC了,主要是问题要考虑全然。特别是对特殊情况的处理。
#6 ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like
this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I R
And then read line by line: "PAHNAPLSIIGYIR"
这个题主要是将一个Z型排列的字符串变为按行排列。关键是:找到位置关系。第一行和最后一行因为奇数列少一个元素,要特别处理。
1输出第一行
2输出中间其它行
3输出最后一行
char* convert(char* s, int numRows) {
int i,j;
int slen=0;
char *ps;
char *temp;
slen=strlen(s);
ps = (char *)malloc(sizeof(char)*(slen+1));
temp = ps;
if(slen==1||numRows==1)
return s;
for(i=0; i<numRows; i++)
{
if(i==0 || i==numRows-1)//第一行或最后一行单独处理
{
for(j = 0; i+j <slen ; )
{
*temp = s[i+j];
temp++;
j = j + 2*(numRows-1);
}
}
else
{ //中间行
for(j = 0;j<slen;j++)
{
//偶数列 (i,j)相应 j*(numRows-1)+i
if( (j&1 == 0) && ((j*(numRows-1)+i) < slen) )
{
*temp = s[j*(numRows-1)+i];
temp++;
}
//奇数列
else if( ( j&1 == 1) && ((numRows-1)*(j+1)-i) < slen )
{
*temp = s[(numRows-1)*(j+1)-i];
temp++;
}
}
}
}
ps[slen]='