题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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)