006. ZigZag Conversion

6. ZigZag Conversion

发现所有行的重复周期都是 2 * numRows- 2

对于首行和末行之间的行,还会额外重复一次,重复的这一次距离本周期起始字符的距离是 2 numRows- 2 - 2 i

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1 || s.length() == 1)
return s;
string answer;
int i, j, lag = 2 * numRows - 2;//lag循环周期
for (i = 0; i < numRows; i++) {
for (int j = i; j < s.length(); j += lag) {
answer += s[j];
//如果不是第一行或最后一行
if (0 < i && i < numRows - 1) {
int t = j + lag - 2 * i;
if (t<s.length())
answer += s[t];
}
}
}
return answer;
}
};
作者

mmmwhy

发布于

2018-05-27

更新于

2022-10-30

许可协议

评论