ZigZag Conversion

nRows = 2

0 2 4 6 8

1 3 5 7 9
nRows = 3

0   4   8     12    16

1 3 5 7 9  11 13 15

2   6   10    14
nRows = 4

0     6       12       18

1   5 7    11 13    17 19

2 4   8 10    14 16

3     9       15

可以发现规律

1. 一块区域,即一个类似于“v”的形状为一个区域,区域的size是nRows*2-2;

2. 在每一个区域中,只有第一行和最后一行有一个数,其余行每行包含两个数;

3. 在除第一行和最后一行的其余行,第二个数和第一个数的差距是size-i*2。

上代码

class Solution {

public:

    string convert(string s, int nRows) {

        // Start typing your C/C++ solution below

        // DO NOT write int main() function

        if (nRows <= 1)

            return s;

        int zigSize = nRows * 2 - 2;

        string rst = "";

        for (int i = 0; i < nRows; i++)

        {

            for (int j = i; j < s.length(); j += zigSize)

            {

                rst += s[j];

                if (i > 0 && i < nRows - 1)

                {

                    if (j+zigSize-2*i < s.length())

                        rst += s[j+zigSize-2*i];

                }

            }

        }

        return rst;

    }

};

 

你可能感兴趣的:(conversion)