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"
class Solution {
public:
string convert(string s, int numRows) {
if ((numRows < 2)
|| (s.size() <= numRows))
{
return s;
}
int col = s.size()/((2 == numRows) ? (numRows - 1) : (numRows - 2)) + 1;
char r[numRows][col];
for (int i = 0; i < col; i++)
{
for (int j = 0; j < numRows; j++)
{
r[j][i] = 0;
}
}
int index = 0;
for (int i = 0; i < col; i++)
{
if ((0 == (i % 2))
|| (2 == numRows))
{
for (int j = 0; (j < numRows) && (index < s.size()); j++)
{
r[j][i] = s.at(index++);
}
}
else
{
for (int j = (numRows - 2); j > 0 && (index < s.size()); j--)
{
r[j][i] = s.at(index++);
}
}
}
string result;
for (int j = 0; j < numRows; j++)
{
for (int i = 0; i < col; i++)
{
if (r[j][i] != '\0')
{
result.push_back(r[j][i]);
}
}
}
return result;
}
};