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 RAnd then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
这是在leetcode上做到第一道easy的题目,把题目读懂了,就不成什么问题。自己动手画一画,一下子就有思路了。
C语言代码如下:
char* convert(char* s, int numRows) {
int len= strlen(s);
int n = numRows * 2 - 2;
int i,j,k;
char *r = (char *)malloc(sizeof(char) * (len + 1));
if(numRows == 1)
return s;
for(i = 0,k = 0; i < numRows; i++){
if(i == 0 || i == numRows - 1)
for(j = 0; n * j + i < len ; j++)
r[k++] = s[n * j + i];
else
for(j = 0; ; j++){
if(n * j + i < len){
r[k++] = s[n * j + i];
if(n * j + i + (numRows - i -1) * 2 < len)
r[k++] = s[n * j + i + (numRows - i - 1) * 2];
else
break;
}
else
break;
}
}
r[k] = '\0';
return r;
}