[Medium]LeetCode第6题——Z字形变换

83 阅读1分钟

题目链接

Z字形变换

解法

image.png

本题就是一道找规律的题。你可以看到在第0行和第n - 1行,首项都是行号,公差都是2 * n - 2。而在中间行中,有两个等差数列交替前进,以第1行为例,分别是:1, 7, 135, 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;
    }
};