题目
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 R
And 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 s, int numRows);
Example 1:
Input: s = “PAYPALISHIRING”, numRows = 3
Output: “PAHNAPLSIIGYIR”
Example 2:
Input: s = “PAYPALISHIRING”, numRows = 4
Output: “PINALSIGYAHRPI”
Explanation:
P I N
A L S I G
Y A H R
P I
解法:
创建和行数一样多的字符串数组,按向下向上来回逐个读入字符串列表中,最后将数组的几个字符串拼接。
代码如下:
string convert(string s, int numRows) {
if (numRows == 1) return s;
string* strs = new string[numRows];
int i = 0;
// 字符要插入的容器
int idx = 0;
bool isAdd = true;
while (i < s.size()) {
strs[idx].append(s, i++, 1);
if (isAdd)
++idx;
else
--idx;
if (idx >= numRows) {
isAdd = false;
idx = numRows - 2;
}
if (idx < 0) {
isAdd = true;
idx = 1;
}
}
// 整合容器char
string tar;
int strIdx = 0;
for (int i = 0; i < numRows; ++i) {
tar.append(strs[i]);
}
return tar;
}