题目描述:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N
这个 Z 字型其实是这样的:
当前行 curRow 为 0 或 n-1 时,箭头发生反向转折  需要一个标志位进行更新
code:
通过	20 ms	12.9 MB	Cpp
class Solution {
public:
    string convert(string s, int numRows)
    {
        int len=s.size();
        if(numRows==1)
        {
            return s;
        }
        vector<string> cum(min(len,numRows));//形成一定得数量得stringvector
        int rums=0;
        bool goingdown=false;//上下的标志位
        for(char c:s)
        {
            cum[rums]+=c;
            if(rums==0||rums==numRows-1)//发生标志的转变  rums=0或者nums=numRows-1这种情况下
            {
                goingdown=!goingdown;
            }
            rums=rums+(goingdown?1:-1);
        }
        string sums;
        for(string row:cum)
        {
            sums+=row;
        }
        return sums;



    }
};
通过	96 ms	13.4 MB	Python3
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
            return s
        ans = ['' for _ in range(numRows)]
        pos = 0
        for i in s:
            if pos == 0:
                z = 1
            elif pos == numRows-1:
                z = -1
            ans[pos] += i
            pos += z
        return ''.join(ans)