6. ZigZag Conversion

题目链接

https://leetcode.com/problems/zigzag-conversion/

解题思路

把ZigZag分两步,先往下走,再往右上方走,一直重复这两个步骤,过程中用二维数组记录每一行的字符,最后在拼接起来。

代码

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows <= 1) {
            return s;
        }
        vector> v(numRows);
        int i = 0;
        while (i < s.length()) {
            int k = 0;
            //往下走
            for (; k < numRows - 1 && i < s.length(); k++) {
                v[k].push_back(s[i++]);
            }
            //往右上方走
            for (; k > 0 && i < s.length(); k--) {
                v[k].push_back(s[i++]);
            }
        }

        string res(s);
        int k = 0;
        for (i = 0; i < numRows; ++i) {
            for (auto ch : v[i]) {
                res[k++] = ch;
            }
        }
        return res;
    }
};

你可能感兴趣的:(6. ZigZag Conversion)