zigzag-conversion

Convert a string written in a zigzag pattern to another order by row.

  1. 问题
    英文详细描述见链接:zigzag-conversion

  2. 分析
    假设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, … 即可。

  3. code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class 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;
    }
    };