近期開始刷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]='