Description:
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"
.
思想:之字形打印,如下图所示(这里假设打印numRows = 5 行),打印出来的结果是将第0行到第numRow-1行(从0开始计数)的非空字符拼接而成。我们创建numRows个string数组。用于保存每行中的非空字符。分两种情况写入到string数组。第一种是#字符这种情况。第二种是@字符这种情况。具体见代码。
# #
# @ #
# @ #
# @ #
# #
class Solution {
public:
string convert(string s, int numRows) {
string tmp[numRows], res;
for(int i = 0; i < s.length(); ) {
for(int j = 0; j < numRows && i < s.length(); j ++, i ++)
tmp[j] += s[i];
for(int k = numRows-2; k > 0 && i < s.length(); k --, i ++)
tmp[k] += s[i];
}
for(int j = 0; j < numRows; j ++)
res += tmp[j];
return res;
}
};