Convert a string written in a zigzag pattern to another order by row.
问题
英文详细描述见链接:zigzag-conversion分析
假设k是非负数,
从第一行开始分析,其下标的顺序为:k * 2 * (numRows-1) + 0;
对于最后一行,其下标顺序为:k * 2 * (numRows-1) + 0;
对于第i行,其下标顺序为:k * 2 * (numRows-1) + i 和 (k+1) * 2 * (numRows-1) - i。
因此在保证下标不超出字符串长度的前提下,对每一行取 k = 0, 1, … 即可。code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
string res;
int cycle = 2 * (numRows - 1);
for (int i = 0; i < numRows; i++) {
for (int k = 0; k + i < s.size(); k += cycle) {
res += s[k + i];
if (i != 0 && i != numRows - 1 && k + cycle - i < s.size()) {
res += s[k + cycle - i];
}
}
}
return res;
}
};