Problem:
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"
.
Solution:
The solution is nothing but find a general pattarn to arrange the characters in the desired form.
Solution:
C++:
string convert(string s, int nRows) {
if(nRows == 1)
return s;
string rStr;
for(int row = 0; row < nRows; ++row)
for(int i = row; i < s.size(); i += 2*(nRows - 1)) {
rStr.append(&s[i], 1);
if(row != 0 && row != nRows - 1 && i + 2*(nRows - 1 - row) < s.size())
rStr.append(&s[i + 2*(nRows - 1 - row)], 1);
}
return rStr;
}
Java
:
Python: