1.Question
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"
.2.Code
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 1) return s;
string rs[numRows] = ""; //用numRows个string来保存每一行的字符串
for(int i = 0, j = 0, flag = 1, size = s.size(); i < size; i++)
{
rs[j] += s[i]; //j表示每一行
j += flag; //flag的正负决定移动的方向是下一行还是上一行
if(j == 0 || j == numRows - 1) flag *= -1;
}
for(int i = 1; i < numRows; i++) //把所有行拼接在一起
rs[0] += rs[i];
return rs[0];
}
};
3.Note
a. 题目的意思是,把原字符串按Z字型重新排列,然后输出。