题目链接
解法
本题就是一道找规律的题。你可以看到在第0行和第n - 1行,首项都是行号,公差都是2 * n - 2
。而在中间行中,有两个等差数列交替前进,以第1行为例,分别是:1, 7, 13
和5, 11
。对于这两个等差数列,公差都是2 * n - 1
,而第一个数列首项为行号,第二个数列首项为2 * n - 2 - 行号
。因此易得最后的答案。代码如下。
class Solution {
public:
string convert(string s, int n) {
string ans;
if (n == 1) return s;
for (int i = 0; i < n; i ++) {
if (i == 0 || i == n - 1)
for (int j = i; j < s.size(); j += 2 * n - 2)
ans += s[j];
else {
for (int j = i, k = 2 * n - 2 - i; j < s.size() || k < s.size(); j += 2 * n - 2, k += 2 * n - 2) {
if (j < s.size()) ans += s[j];
if (k < s.size()) ans += s[k];
}
}
}
return ans;
}
};