原题链接:https://leetcode.com/problems/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 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"
.
char* convert(char* s, int numRows) { if(numRows == 1) return s; int len = strlen(s); char* ret = (char *)malloc((len + 1) * sizeof(char)); int i, j, index = 0; for(i = 0; i < numRows; ++i) { j = i; while(j < len) { ret[index++] = s[j]; if(i == 0 || i == numRows - 1) j += 2 * numRows - 2; else { j += 2 * (numRows - i - 1); if(j < len) { ret[index++] = s[j]; j += 2 * i; } } } } for(i = 0; i < len; ++i) s[i] = ret[i]; free(ret); return s; }
原文地址:http://blog.csdn.net/ice_camel/article/details/46581583